AngleSharp - 处理自闭标签

AngleSharp - Processing self closed tags

解析包含自闭合标签的 html 片段时:

var text = @"<tag /> and another <tag />";
var parser = new HtmlParser();
var originalHtml = parser.Parse(text);

OuterHtml 的最终输出是:

<tag> and another <tag></tag></tag>

我知道 anglesharp 不会 "renders" 在没有自定义格式化程序的情况下自动关闭标签,但是考虑到输入,这个输出是预期的吗?

我希望是这样的:

<tag></tag> and another <tag></tag>

这与 AngleSharp 无关,而是与 HTML5 规范有关。仅在少数元素上允许自关闭(并且主要只是为了向后兼容 - 实际上在适当的 HTML5 中你永远不会自关闭,而是使用隐式自关闭,即更喜欢 <img>超过 <img /><meta> 超过 <meta />).

全部写入:由于您提供的标签 (tag) 未知,因此也不例外(例外列表很短 - 上面提到的两个都在此列表)。如果您想使用与自定义标签相似的标签,请使用 div.

现在比较使用

的输出
var text = @"<div /> and another <div />";

var text = @"<img /> and another <img />";

您应该看到后者(使用 img)为您提供了预期的输出(序列化不同,但生成的 DOM 将是等效的),而 div 看起来像当前输出。

重要提示:HTML 看起来像是 XML 的子集,但实际上并非如此。它也不是超集。 HTML 一段时间前开始出现偏差,而 HTML5 只是为了通过提供一种通用方法来处理任何类型的意外标记而最终使解析器端变得理智。

希望对您有所帮助!