2013-02-03 74 views
3

如果聽起來太簡單了,不能問這裏,但是因爲這是我第一天使用html-agility-pack,所以我無法理清一種方法來選擇內部節點的文本,該節點是節點的直接子節點並忽略子節點的內部文本。節點的內部文本忽略兒童的內部文本

例如

<div id="div1"> 
    <div class="h1"> this needs to be selected 
    <small> and not this</small> 
    </div> 
</div> 

目前我想這

HtmlDocument page = new HtmlWeb().Load(url); 
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']"); 
string selText = s.innerText; 

返回整個文本(e.g-這需要進行選擇,而不是這個)。 有什麼建議?

回答

2

您可以使用/text()選項直接獲取特定標籤下的所有文本節點。如果你只需要在第一個加[1]它:

page.LoadHtml(text); 
var s = page.DocumentNode.SelectSingleNode("//div[@id='div1']//div[@class='h1']/text()[1]"); 
string selText = s.InnerText; 
3

div可能有多個文本節點,如果有文本之前和它的孩子後。正如我同樣表示here,我認爲獲得節點的所有直接文本內容的最佳方式是做類似的事情:

HtmlDocument page = new HtmlWeb().Load(url); 
var nodes = page.DocumentNode.SelectNodes("//div[@id='div1']//div[@class='h1']/text()"); 

StringBuilder sb = new StringBuilder(); 
foreach(var node in nodes) 
{ 
    sb.Append(node.InnerText); 
} 

string content = sb.ToString();