什么是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…等等!

我猜这是检测空白或返回空间作为一个节点,但这是这样的循环浪费。谁能给我解释一下,怎么避免这种情况。由于

什么是htmlnode中的#text node ?

这就是HTML/XML的工作原理。每当节点中有一些文本时,就会有一个文本节点。在这种情况下,它恰好是空白,但它仍然是文本,不能丢弃。节点不是"愚蠢的",它确实存在。

您的代码可以自由地检查文本节点是否为空白,如果您想忽略它,或者您可以使XML不存在任何空白。

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

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

所以,解析器应该只是"有测试,然后有一个空span元素,然后测试,所以实际上里面的文本是'Testtest'"?或者它怎么知道该怎么做?