如何在C#中使用HTML字符串操作DOM?

时间:2008-10-23 23:49:10

标签: c# .net html dom .net-2.0

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

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

有两个问题:

  1. 需要WebBrowser个对象!
  2. 这不能用于多个线程;我需要能在不同线程上工作的东西(主线程除外)。
  3. 有什么想法吗?

4 个答案:

答案 0 :(得分:17)

我搜索了GooglePlex for HTML,我发现Html Agility Pack我不知道是不是这样,我现在正在下载试试。

答案 1 :(得分:7)

取决于您要做的事情(也许您可以提供更多详细信息?)并且取决于HTML是否格式正确,您可以将其转换为{{1 }}:

XmlDocument

然后,您可以轻松地操作它,而不需要System.Xml.XmlDocument x = new System.Xml.XmlDocument(); x.LoadXml(html); // as long as html is well-formed, i.e. XHTML 实例。至于线程,我对WebBrowser的实现知之甚少,不知道该部分的答案。


如果文档格式不正确,您可以使用NTidyHTML Tidy的.NET包装器)将其初始化为形状;我不得不为一个项目做过一次,这真的不是太糟糕。

答案 2 :(得分:6)

JasonBunting已经发布了这个,但它确实可以在HTML整理中使用.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);

很抱歉,如果考虑重新发布:)

答案 3 :(得分:3)

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