[英]C# What is #text node in htmlnode?
我试图遍历每个html节点并获取其属性和innerText。 目前,当我扫描任何html时,我都会得到这个愚蠢的#text节点,即使它不存在。
这是我的html
<div class="demographic-info adr editable-item" id="demographics">
<div id="location-container" data-li-template="location">
<div id="location" class="editable-item">
<dl>
<dt>Location</dt>
<dd>
<span class="locality">Bolton, United Kingdom</span>
</dd>
<dt>Industry</dt>
<dd class="industry">Computer Games</dd>
</dl>
</div>
</div>
</div>
这是我的C#
foreach (HtmlNode node in j.ChildNodes)
if (node.HasChildNodes)
checkNode(node);
static void checkNode(HtmlNode node)
{
foreach (HtmlNode n in node.ChildNodes)
{
if (n.HasChildNodes)
checkNode(n);
else
{
HtmlNode nodeValue = hasValueInNode(n);
if (nodeValue != null)
addCategories(nodeValue);
}
}
}
当我通过调试模式检查编译器位于哪个节点时,我得到了:
1 = div,2 =#text,3 = div,4 =#text,5 = div,6 =#text,7 = dl ...依此类推!
我猜想这是将空白或返回空间检测为节点,但这是循环的浪费。 有人可以向我解释一下,以及避免它的方法。 谢谢
这就是HTML / XML的工作方式。 每当节点内有一些文本时,都会有一个文本节点。 在这种情况下,它碰巧是空白,但仍然是文本,不能将其丢弃。 该节点不是“愚蠢”的,它确实存在。
您的代码可以自由检查文本节点是否为空格,如果需要可以忽略它,也可以将XML制作为没有任何空格。
就像一个想法:您如何告诉解析器哪个空格应该很重要:
<div>
<div>Test<span>
</span>test</div>
</div>
因此,解析器应该只是“有Test,然后有一个空的span元素然后进行测试,所以实际上里面的文本是'Testtest'”? 还是怎么知道该怎么办?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.