我正在尝试浏览每个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 ... 等等!
我猜这是检测空格或将空间作为节点返回,但这是浪费循环。有人可以向我解释这个并避免它。感谢
答案 0 :(得分:1)
这就是HTML / XML的工作原理。每次节点内有一些文本时都有一个文本节点。在这种情况下,它恰好是空格,但它仍然是文本,不能被丢弃。该节点不是“愚蠢的”,它确实存在。
您的代码可以自由检查文本节点是否为空格,如果您愿意,可以忽略它,或者您可以创建XML以便没有任何空格。
就像一个想法:你如何告诉解析器哪个空白应该是重要的:
<div>
<div>Test<span>
</span>test</div>
</div>
那么,如果解析器只是“有测试然后是空的span元素然后测试,那么实际上里面的文本是'Testtest'”?或者它怎么知道该做什么?