目前,我发现能够从包含 HTML 的字符串中操作 DOM 的最佳方法是:
WebBrowser webControl = new WebBrowser();
webControl.DocumentText = html;
HtmlDocument doc = webControl.Document;
有两个问题:
- 需要
WebBrowser
对象! - 这不能与多线程一起使用;我需要一些可以在不同线程(除了主线程)上工作的东西。
有任何想法吗?
我在 GooglePlex 上搜索了 HTML,发现了Html Agility Pack,我不知道它是否适合,我现在正在下载它尝试一下。
根据您要执行的操作(也许您可以向我们提供更多详细信息?)并根据 HTML 是否格式正确,您可以将其转换为XmlDocument
:
System.Xml.XmlDocument x = new System.Xml.XmlDocument();
x.LoadXml(html); // as long as html is well-formed, i.e. XHTML
然后你可以很容易地操纵它,而不需要WebBrowser
实例。至于线程,我对实现的了解还不够,无法知道XmlDocument
那部分的答案。
如果文档的格式不正确,您可以使用NTidy(HTML Tidy的 .NET 包装器)先使其成型;我不得不为一个项目做一次这件事,而且真的还不错。
JasonBunting 已经发布了这个,但它确实可以在 HTML tidy 周围使用 .net 包装器并将其加载到 XmlDocument 中。
我以前使用过这个 .net 包装器:
http://www.codeproject.com/KB/cs/ZetaHtmlTidy.aspx
并实现它有点像这样:
string input = "<p>crappy html<br <img src=foo></div>";
HtmlTidy tidy = new HtmlTidy()
string output = tidy.CleanHtml(input, HtmlTidyOptions.ConvertToXhtml);
XmlDocument doc = new XmlDocument();
doc.LoadXml(output);
抱歉,如果考虑转发:)