【问题标题】:How can I manipulate the DOM from a string of HTML in C#? [closed]如何从 C# 中的 HTML 字符串操作 DOM? [关闭]
【发布时间】:2010-09-18 22:07:08
【问题描述】:

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

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

有两个问题:

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

有什么想法吗?

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 同上 - 实际上,我正要推荐使用 HTML Tidy 将文档调整为良好的形状,然后将其转换为 XmlDocument,但也许您可以使用 HTML Agility Pack 跳过它。好东西。
  • 敏捷包可以很好地与 HTML 和线程配合使用!我得到了答案!谢谢大家!!!
  • 是的,为 HtmlAgilityPack +1。站在巨人的肩膀上!
  • Html Agility Pack 是 BUGGY !!!!!! ,你不能修改 html 。最好不要修改 html 。 html 修改(insertafter、replacenode)不工作。 csQuery 看起来更有前途
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    JasonBunting 已经发布了这个,但它确实可以使用 .net 包装器围绕 HTML tidy 并将其加载到 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);
    

    抱歉,如果考虑转发:)

    【讨论】:

      【解决方案4】:

      根据您要执行的操作(也许您可以提供更多详细信息?)以及根据 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 包装器)先使其成型;我不得不为一个项目做一次这样的事情,真的还不错。

      【讨论】:

      • 文档可能格式不正确,这就是 XmlDocument 可能无法正常工作的原因,但我很欣赏替代方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 2021-09-08
      • 2016-06-29
      相关资源
      最近更新 更多