使用WP7将HTML转换为XML

时间:2011-01-19 16:57:21

标签: c# html xml windows-phone-7

简单的情况,想要通过HTML字符串搜索,得到一些信息。 写完.substing和。的质量线后变得很烦人。我希望查找并删除HTML文件的每个元素的IndexOf。

Afaik我无法将这样的dll作为HTMLtidy或HTML Agility Pack加载到我的WP7项目中,那么是否有更高效,更可靠的方式来搜索我的HTML字符串而不是使用IndexOf构建Substings?

    void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
       string document = string.Empty;
       using (var reader = new StreamReader(e.Result))
          document = reader.ReadToEnd();

       string temp = document.Substring(document.IndexOf("Games Played"), (document.IndexOf("League Games") - document.IndexOf("Games Played")));
       temp = (temp.Substring(temp.IndexOf("<span>"), (temp.IndexOf("</span>") - temp.IndexOf("<span>")))).Remove(0, 6);
       Int32.TryParse(temp, out leaugeGamesPlayed);
    }

感谢您的帮助

Gpx

4 个答案:

答案 0 :(得分:4)

您可以使用HTML Agility Pack,但需要转换版本的HTML Agility Pack for the Phone。它只能从svn存储库中获得,但效果很好,我在我的应用程序中使用它。

http://htmlagilitypack.codeplex.com/SourceControl/changeset/view/77494#

您可以在名为HAPPhone和HAPPhoneTest的主干下找到两个项目。您可以使用右侧的下载按钮来获取代码。它使用Linq而不是XPath来工作。

答案 1 :(得分:3)

您可以使用LINQ来解析HTML并找到您感兴趣的元素。例如:

XDocument parsed = XDocument.Parse(document);
var spans = parsed.Descendants("span");

Beth Massi有一篇很棒的博文:Querying HTML with LINQ to XML

答案 2 :(得分:3)

假设您这样做是因为您从网站/网页/服务器获取HTML。

请勿在设备上进行转换。

创建一个包装器/代理站点/服务器/页面以进行转换。虽然这有必要创建额外服务的缺点,但它具有以下优点:

  • 服务器上的代码将比已发布的应用程序中的代码更容易更新。 (解析不直接控制的HTML的经验将表明您需要在解析时进行更改,因为原始HTML几乎肯定会在将来更改时给您带来意想不到的东西。)
  • 如果您可以在服务器上执行一次,则可以缓存结果,而不是让应用程序的实例进行转换。
  • 凭借以上2点,应用程序运行得更快!

如果您在设计/构建时拥有HTML文件,则将其转换为更易于使用的内容,并避免在运行时进行不必要的计算。

答案 3 :(得分:0)

作为一种解决方法,您可以考虑将HTML加载到WebBrowser控件中,然后通过注入的javascript(回调到.NET)查询DOM