我有一个包含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>");
}
答案 0 :(得分:1)
虽然会增加应用程序的开销,但我建议您尽可能将HTML加载到WebView
并通过InvokeScript
(docs)方法使用DOM访问权限获取对DOM的访问权限并进行必要的搜索。 IE的HTML解析器是宽容的,几乎可以处理你抛出的任何HTML。
如果需要,您可以使用NavigateToString
(docs)加载HTML。
我建议使用这种技术的原因是,鉴于HTML5不需要格式良好(如XHTML),您可能会遇到各种奇怪的情况,这些情况会使DOM的可靠解析非常具有挑战性,特别是如果你需要保留DOM的结构作为搜索的一部分。
我(或者我曾经参加过的团队)过去曾为C#使用过一些DOM解析库,发现它们都缺乏健壮性。如果您正在解析一组非常固定的HTML,您可能会发现其中一个有用。
直到最近,谷歌宣布发布他们的Gumbo库,一个用C语言编写的纯HTML 5解析器(当然不会帮助你)。