0

我有一个string包含 HTML,我需要在 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>");
}
4

1 回答 1

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 语言编写(当然对您没有帮助)。

于 2013-09-02T16:57:37.697 回答