Windows 8运行时/存储应用程序中的HTML处理

时间:2013-09-02 13:14:36

标签: c# windows-8 windows-runtime html-parsing windows-store-apps

我有一个包含HTML的string,我需要在Windows 8 Store App中解析它。 System.Windows.Forms.HtmlDocument 不适用于商店应用。我只需要提取一些页面链接,图像链接和一些文本内容。

我想我可以使用正则表达式来实现快速和肮脏的解决方案,但必须有更好的方法。解析应该是健壮的,即使HTML稍微破坏或非标准,也不会拒绝整个字符串。谷歌搜索提供了一些替代方案,但我发现结果不确定,并希望得到实际完成此操作的人的直接答案(或答案列表)。有些代码会很好,或只是链接到SO回答好的代码。

一些澄清的代码:

public async void doSomeHtmlStuff(string url) {
    System.Net.Http.HttpClient client = new HttpClient();
    string html = await client.GetStringAsync(url);

    // parse the html, how? 

    // NOT anything like this, document tree is needed for context
    var links = Regex.Matches(html, "<a\\s*href=.*>.*</a>");
}

1 个答案:

答案 0 :(得分:1)

虽然会增加应用程序的开销,但我建议您尽可能将HTML加载到WebView并通过InvokeScriptdocs)方法使用DOM访问权限获取对DOM的访问权限并进行必要的搜索。 IE的HTML解析器是宽容的,几乎可以处理你抛出的任何HTML。

如果需要,您可以使用NavigateToStringdocs)加载HTML。

我建议使用这种技术的原因是,鉴于HTML5不需要格式良好(如XHTML),您可能会遇到各种奇怪的情况,这些情况会使DOM的可靠解析非常具有挑战性,特别是如果你需要保留DOM的结构作为搜索的一部分。

我(或者我曾经参加过的团队)过去曾为C#使用过一些DOM解析库,发现它们都缺乏健壮性。如果您正在解析一组非常固定的HTML,您可能会发现其中一个有用。

直到最近,谷歌宣布发布他们的Gumbo库,一个用C语言编写的纯HTML 5解析器(当然不会帮助你)。