gpt4 book ai didi

c# - HTML敏捷包: Could someone please explain exactly what is the effect of setting the HtmlDocument OptionAutoCloseOnEnd to true?

转载 作者:太空狗 更新时间:2023-10-29 21:43:25 32 4
gpt4 key购买 nike

当前文档说:

Defines if closing for non closed nodes must be done at the end or directly in the document. Setting this to true can actually change how browsers render the page. Default is false.

对不起,我不得不承认我不明白这段话。具体“到底”是什么? “在文档中”到底是什么意思?最后一个之前的短语听起来不祥。如果该选项设置为 true 并且 html 格式正确,这是否仍会影响文档?

我查看了源代码,但我不明白发生了什么 - 代码对未设置为 true 的属性作出 react 。参见 HtmlNode.cs ,然后搜索 OptionAutoCloseOnEnd - 第 1707 行。我还在 HtmlWeb.cs 中发现了一些古怪的代码在第 1113 和 1154 行。可惜源代码浏览器不显示行号,而是在页面中搜索 OptionAutoCloseOnEnd。

您能否举例说明此选项的作用?

我正在使用 HtmlAgilityPack 修复一些错误的 html 并将页面内容导出到 xml。

我遇到了一些格式错误的 html - 重叠标签。这是片段:

<p>Blah bah
<P><STRONG>Some Text</STRONG><STRONG></p>
<UL>
<LI></STRONG>Item 1.</LI>
<LI>Item 2</LI>
<LI>Item 3</LI></UL>

请注意,第一个 p 标签未关闭并注意重叠的 STRONG 标签。

如果我设置 OptionAutoCloseOnEnd,这会以某种方式得到修复。我试图了解在文档结构中通常将此属性设置为 true 的确切效果。

这是我正在使用的 C# 代码:

HtmlDocument doc = new HtmlDocument();
doc.OptionOutputAsXml = true;
doc.OptionFixNestedTags = true;
// doc.OptionAutoCloseOnEnd = true;
doc.LoadHtml(htmlText);

谢谢!

最佳答案

当前代码总是在父节点关闭之前关闭未关闭的节点。所以下面的代码

var doc = new HtmlDocument();
doc.LoadHtml("<x>hello<y>world</x>");
doc.Save(Console.Out);

将输出这个(未关闭的 <y> 在父级 <x> 关闭之前关闭)

<x>hello<y>world</y></x>

最初,设置该选项是为了能够生成它(不适用于 XML 输出类型):

<x>hello<y>world</x></y>

以收尾 <y>设置在文档的末尾(这就是“结束”的意思)。请注意,在这种情况下,您仍然可以获得重叠元素。

这个功能(我承认可能没用)在过去的某个地方被破坏了,我不知道为什么。

备注<p>标记大小写很特殊,因为它默认由自定义 HtmlElementFlag 控制。这是它在 HtmlNode.cs 中的声明方式:

ElementsFlags.Add("p", HtmlElementFlag.Empty | HtmlElementFlag.Closed);

关于c# - HTML敏捷包: Could someone please explain exactly what is the effect of setting the HtmlDocument OptionAutoCloseOnEnd to true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40392309/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com