我正在使用AngleSharp开发有限的浏览器功能。它解析 HTML 的方式让我有点困惑。例如,以下“div”的内容被解析为一个 BR 子元素和一个带有文本“test”的 TextContent 属性。所以不可能找到 BR 元素在文本中的位置。
<div>te<br />st</div>
我认为如果 DIV 有 3 个子组件会更好。第一个是内容为“te”的文本元素,然后是 BR 元素,其后是另一个内容为“st”的文本元素。
有没有其他解决方案?
我正在使用AngleSharp开发有限的浏览器功能。它解析 HTML 的方式让我有点困惑。例如,以下“div”的内容被解析为一个 BR 子元素和一个带有文本“test”的 TextContent 属性。所以不可能找到 BR 元素在文本中的位置。
<div>te<br />st</div>
我认为如果 DIV 有 3 个子组件会更好。第一个是内容为“te”的文本元素,然后是 BR 元素,其后是另一个内容为“st”的文本元素。
有没有其他解决方案?
实际上,它会产生预期的结果。AngleSharp 的 DOM(和 HTML5 兼容的解析器)根据 W3C 规范工作。因此应该没什么意外(与常青浏览器相比)。
var text = "<div>te<br/>st</div>";
var context = BrowsingContext.New();
var document = context.OpenAsync(m => m.Content(text)).Result;
var div = document.Body.QuerySelector("div");
Console.WriteLine(div.ChildNodes.Length);
foreach (var child in div.ChildNodes)
{
Console.WriteLine(child.NodeName);
Console.WriteLine(child.TextContent);
}
输出是
3
#text
te
BR
#text
st
因此我们有(文本节点,BR 元素,文本节点)。希望这可以帮助!