HtmlAgilityPack 自动关闭表单标签

发布于 2024-11-30 08:03:11 字数 593 浏览 1 评论 0原文

我试图用以下代码解析 html 文件:

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

问题是 HtmlAgilityPack 在 div 结束标记之前自动关闭表单标记:

...
... 因此,当我解析表单时,某些表单元素丢失了。 (我只得到自动添加标签之前的元素)

我已经尝试过:

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

但没有任何帮助!

谢谢你的帮助!

I am tring to parse an html file with this code:

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

the problem is that the HtmlAgilityPack automatically close the form tag before the div ending tag:
<div><form>...</form></div>...</form> so when I parse the form some of the form elements are missing. (I get only the elements befor the automatically added tag)

I already tried:

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

But nothing helps!

thanks for you help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青衫儰鉨ミ守葔 2024-12-07 08:03:11

以下似乎对我有用:

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

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

The following seems to work for me:

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

_document = new HtmlDocument();
_document.OptionAutoCloseOnEnd = true;
_document.LoadHtml(content);
椵侞 2024-12-07 08:03:11

这取决于您在解析文本后想要以编程方式执行的操作。如果你不想用它做任何特别的事情,下面的代码:

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

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

It depends on what you want to do programmatically after the text has been parsed. If you don't want to do anything special with it, the following code:

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

    doc.Save(Console.Out);

will display exactly the same string, that is:

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

Because the library was designed from the grounds up to try to keep the original Html as much as possible.

But in terms on how this is represented in the DOM, and in terms of errors, this is another story. You can't have at the same time 1) overlapping elements 2) XML-like DOM (which does not support overlaps) and 3) no errors.

So it depends on what you want to do after parsing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文