【问题标题】:HTML handling in Windows 8 Runtime / Store AppWindows 8 运行时/应用商店应用程序中的 HTML 处理
【发布时间】:2013-09-02 13:14:36
【问题描述】:

我有一个包含 HTML 的string,我需要在 Windows 8 应用商店应用程序中解析它。 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>");
}

【问题讨论】:

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


    【解决方案1】:

    虽然它会增加应用程序的开销,但我建议您尽可能将 HTML 加载到 WebView 中,并通过 InvokeScript (docs) 方法使用 DOM 访问来访问 DOM并进行任何必要的搜索。 IE 的 HTML 解析器具有容错性,几乎可以处理你扔给它的任何 HTML。

    如果需要,您可以使用 NavigateToString (docs) 加载 HTML。

    我建议使用这种技术的原因是,鉴于 HTML5 不需要格式正确(如 XHTML),您可能会遇到各种奇怪的情况,这些情况会使可靠地解析 DOM 变得非常具有挑战性,尤其是当您需要将 DOM 的结构保留为搜索的一部分时。

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

    直到最近,Google 才宣布发布他们的 Gumbo 库,这是一个纯 HTML 5 解析器,用 C 编写(当然对您没有帮助)。

    【讨论】:

    • 我最终使用了 HtmlAgilityPack,并没有尝试这种方法,但这听起来也不错,所以我接受了。
    • HtmlAgilityPack 祝你好运......我们放弃了它,因为它不像浏览器那样容忍混乱的 HTML,而且据我回忆,它在内存方面并不是超级高效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多