11

目前,我发现能够从包含 HTML 的字符串中操作 DOM 的最佳方法是:

WebBrowser webControl = new WebBrowser();
webControl.DocumentText = html;
HtmlDocument doc = webControl.Document;

有两个问题:

  1. 需要WebBrowser对象!
  2. 这不能与多线程一起使用;我需要一些可以在不同线程(除了主线程)上工作的东西。

有任何想法吗?

4

4 回答 4

25

我在 GooglePlex 上搜索了 HTML,发现了Html Agility Pack,我不知道它是否适合,我现在正在下载它尝试一下。

于 2008-10-23T23:57:37.217 回答
9

根据您要执行的操作(也许您可以向我们提供更多详细信息?)并根据 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那部分的答案。


如果文档的格式不正确,您可以使用NTidyHTML Tidy的 .NET 包装器)先使其成型;我不得不为一个项目做一次这件事,而且真的还不错。

于 2008-10-23T23:54:52.760 回答
7

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);

抱歉,如果考虑转发:)

于 2008-10-28T09:55:31.107 回答
4

这是一个老问题。现在有:

  • HTML 敏捷包(你已经找到了这个)
  • CsQuery,一个 .Net jQuery 端口,非常适合 jQuery 开发人员
于 2013-09-25T20:19:01.427 回答