C#htmlnode中的#text节点是什么?

时间:2015-10-12 11:55:10

标签: c# html nodes

我正在尝试浏览每个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 ...   等等!

我猜这是检测空格或将空间作为节点返回,但这是浪费循环。有人可以向我解释这个并避免它。感谢

1 个答案:

答案 0 :(得分:1)

这就是HTML / XML的工作原理。每次节点内有一些文本时都有一个文本节点。在这种情况下,它恰好是空格,但它仍然是文本,不能被丢弃。该节点不是“愚蠢的”,它确实存在。

您的代码可以自由检查文本节点是否为空格,如果您愿意,可以忽略它,或者您可以创建XML以便没有任何空格。

就像一个想法:你如何告诉解析器哪个空白应该是重要的:

<div>
  <div>Test<span>
  </span>test</div>
</div>

那么,如果解析器只是“有测试然后是空的span元素然后测试,那么实际上里面的文本是'Testtest'”?或者它怎么知道该做什么?