【问题标题】:AngleSharp - Processing self closed tagsAngleSharp - 处理自封闭标签
【发布时间】:2017-01-20 03:28:18
【问题描述】:

在解析包含自闭标签的 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>

【问题讨论】:

    标签: c# html html-parsing anglesharp


    【解决方案1】:

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

    所有内容都在写:由于您提供的标签 (tag) 是未知的,因此它不是例外(例外列表很短 - 上面提到的两个都在此列表中)。如果您想使用与自定义标签类似的标签,请使用div

    现在比较 using 的输出

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

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

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

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 2021-01-29
      • 1970-01-01
      相关资源
      最近更新 更多