为什么 AngleSharp 不为交错文本生成 TextNodes?

Why doesn't AngleSharp generate TextNodes for interleaved text?

我正在尝试使用 AngleSharp 库解析一些 HTML,到目前为止它一直很棒。我现在偶然发现了一个场景,我想解析以下 HTML:

<a name="someLink" href="#someLink">Link 1</a>
Some text that happens to be in between elements...
<b>Some stuff in bold</b>
Some more text
<br>

当然,HTML这一段有封闭的父元素等,但是HTML这一段的解析元素列表是:

有效地跳过元素之间的文本。我如何获得这个文本?我认为 AngleSharp 会为这些部分生成 TextNodes?

请注意,获取父级的完整 TextContent 并不是我想要做的,因为我实际上仍然需要元素的结构来了解什么是什么。

此行为实际上是 DOM 规范所期望的。您可能没有意识到这一点,但您已经回答了自己的问题:)

这似乎是您得到的不太正确元素!=节点。您要求的是元素,但您正在寻找节点。

<a> 等标签最终成为元素,而文本节点是……好吧……节点,而不是元素。你要求 API 给你元素。换句话说,您是在告诉 API 您不希望返回文本节点。

让我们做一个简单的演示。

var parser = new HtmlParser();
var doc = parser.Parse(@"<div id=""content"">
        <a name=""someLink"" href=""#someLink"">Link 1</a>
        Some text that happens to be in between elements...
        <b>Some stuff in bold</b>
        Some more text
        <br>
    </div>");
var content = doc.GetElementById("content");

现在,这基本上就是 you've been doing:

foreach (var element in content.Children)
    Console.WriteLine(element.GetType().Name);

这输出:

HtmlAnchorElement
HtmlBoldElement
HtmlBreakRowElement

改为what you want

foreach (var element in content.ChildNodes)
    Console.WriteLine(element.GetType().Name);

现在输出是:

TextNode
HtmlAnchorElement
TextNode
HtmlBoldElement
TextNode
HtmlBreakRowElement
TextNode