【问题标题】:HtmlAgilityPack close form tag automaticallyHtmlAgilityPack 自动关闭表单标签
【发布时间】:2011-08-18 08:44:08
【问题描述】:

我想用这段代码解析一个 html 文件:

<div><form>...</div>...</form>

问题在于 HtmlAgilityPack 会在 div 结束标记之前自动关闭表单标记: &lt;div&gt;&lt;form&gt;...&lt;/form&gt;&lt;/div&gt;...&lt;/form&gt; 所以当我解析表单时,一些表单元素丢失了。 (我只得到自动添加标签之前的元素)

我已经试过了:

htmlDoc.OptionFixNestedTags = false;
htmlDoc.OptionAutoCloseOnEnd = false;
htmlDoc.OptionCheckSyntax = false;
HtmlNode.ElementsFlags.Remove("form");
HtmlNode.ElementsFlags.Add("form", HtmlElementFlag.CanOverlap);
HtmlNode.ElementsFlags.Add("div", HtmlElementFlag.CanOverlap);

但没有任何帮助!

感谢您的帮助!

【问题讨论】:

    标签: .net html html-agility-pack


    【解决方案1】:

    以下似乎对我有用:

    HtmlAgilityPack.HtmlNode.ElementsFlags.Remove("form");
    
    _document = new HtmlDocument();
    _document.OptionAutoCloseOnEnd = true;
    _document.LoadHtml(content);
    

    【讨论】:

      【解决方案2】:

      这取决于你想在文本被解析后以编程方式做什么。如果你不想对它做任何特别的事情,下面的代码:

          HtmlDocument doc = new HtmlDocument();
          doc.LoadHtml("<div><form>form and div</div>form</form>");
      
          doc.Save(Console.Out);
      

      将显示完全相同的字符串,即:

      <div><form>form and div</div>form</form>
      

      因为该库的设计初衷就是尽可能地保留原始 Html。

      但就它在 DOM 中的表示方式以及错误而言,这是另一回事。您不能同时拥有 1) 重叠元素 2) 类似 XML 的 DOM(不支持重叠)和 3) 没有错误。

      所以这取决于你解析后要做什么。

      【讨论】:

      • 我需要遍历表单子标签。所以问题是我没有得到所有的子标签,只有孩子,直到自动添加 标签。
      • @ido - 嗯...就像我说的,你可以同时拥有重叠的标签和 DOM(父/子关系)。
      • 嗯,我正在解析一个网站,它确实......并且需要一个解决方案
      • 同一条船。 HAP 正在做一些奇怪的事情。我会传递一大块标记来修改它,它会对其进行更改,我没有要求。不是我所期望的。
      • @jon - 如果您有具体问题,请发布一个新问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 2017-12-03
      • 1970-01-01
      相关资源
      最近更新 更多