2015-10-12 73 views
0

我想通過每個html節點並獲取其屬性和innerText。當我掃描任何html時,即使它不存在,我也會得到這個愚蠢的#text節點。C#什麼是htmlnode中的#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

這就是HTML/XML的工作原理。每次在節點內存在一些文本時都有一個文本節點。在這種情況下,它恰好是空格,但它仍然是文本,不能被丟棄。該節點不是「愚蠢的」,它確實存在。

你的代碼可以自由地檢查文本節點是否爲空白,如果你願意的話可以忽略它,或者你可以製作XML以便沒有任何空格。

就像一個想法:你如何知道哪些空白應該是重要的解析器:

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

所以,應該解析器只是「有測試,然後還有空跨度元素,然後測試,所以actualy裏面的文字是'Testtest'「?或者它會怎麼知道該怎麼做?

+2

空白在其他一些要素中也很重要,例如, 'pre'或XML格式,無論有'xml:space ='preserve''。 – Joey

+0

@Joey非常好的點 –

+0

好的,謝謝你們 – Photonic