1

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

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

OuterHtml 的结果输出是:

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

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

我希望是这样的:

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

1 回答 1

1

这与 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 的出现只是为了最终通过提供一种处理任何类型意外标记的通用方法来为解析器带来理智。

希望这可以帮助!

于 2017-12-11T23:24:45.850 回答