我想用这段代码解析一个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);
但没有任何帮助!
谢谢你的帮助!
答案 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)没有错误。
所以这取决于解析后你想要做什么。