2011-01-19 50 views
0

简单情况下,想要通过HTML字符串搜索,获取一些信息。 写作.Substing和。 IndexOf用于我想要查找和切出HTML文件的每个元素。使用WP7将HTML转换为XML

Afaik我无法加载HTMLtidy或HTML敏捷包这样的DLL到我的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

您可以使用HTML敏捷性包,但你需要HTML敏捷性包的转换后的版本为电话。它只能从svn仓库中获得,但它工作的很好,我在我的应用程序中使用它。

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

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

3

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

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

贝丝马西有一个伟大的博客文章:Querying HTML with LINQ to XML

+0

谢谢,得到一个“不支持的异常” - 认为这可能是因为 - >“所以要解决这个问题,你需要删除所有不支持的HTML实体引用”,但我可能没有把它们全部拿出来。 – Gpx 2011-01-20 10:42:22

0

作为一种变通方法,哟ü可以考虑HTML加载到WebBrowser控件,然后通过查询注入的JavaScript的DOM(它回调到.NET)

3

假设你这样做,因为你得到来自网站/网页/服务器的HTML。

不要将它转换设备。

创建包装/代理网站/服务器/页做转换为你。虽然这不利于创建额外的服务,但它具有以下优点:它具有以下优点:

  • 服务器上的代码比分布式应用程序中的代码更容易更新。 (解析你不直接控制的HTML的经验将表明你将需要在你的解析中进行修改,因为原来的HTML几乎肯定会在将来发生更改时抛出一些意想不到的东西。)
  • 如果你可以做它曾经在服务器上缓存结果,而不是让应用程序的实例进行转换。
  • 依靠以上2点,应用程序将运行得更快!

如果你在设计的HTML文件/建造时间,然后将其转换成一些更容易使用,并避免在运行时不必要的计算。

+0

感谢您的评论马特,我会按照您的意见,当我编码一些更大的项目,并使用Web服务。这是为我自己的电话。 – Gpx 2011-01-24 08:37:50