HtmlAgilityPack自动关闭表单标签

时间:2011-08-18 08:44:08

标签: .net html html-agility-pack

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

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

问题是HtmlAgilityPack会自动关闭div结束标记之前的表单标记:  <div><form>...</form></div>...</form>因此,当我解析表单时,缺少某些表单元素。 (我只获得自动添加标签的元素)

我已经尝试过:

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

但没有任何帮助!

谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

以下似乎对我有用:

HtmlAgilityPack.HtmlNode.ElementsFlags.Remove("form");

_document = new HtmlDocument();
_document.OptionAutoCloseOnEnd = true;
_document.LoadHtml(content);

答案 1 :(得分:0)

在解析文本后,这取决于您希望以编程方式执行 。如果您不想对它做任何特殊操作,请使用以下代码:

    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)没有错误。

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