什么是htmlnode中的#text node ?
本文关键字:node #text 中的 htmlnode 什么 | 更新日期: 2023-09-27 18:17:12
我试图通过每个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>
所以,解析器应该只是"有测试,然后有一个空span元素,然后测试,所以实际上里面的文本是'Testtest'"?或者它怎么知道该怎么做?