2017-04-23 83 views
0

我有一個HTML文件:獲取所有元素在NodeCollections

<div class="form-wrapper"> 
<div></div> 
<div class="Clearfix"> 
<div></div> 
<div></div> 
<span></span><span class="time">Time</span> 
</div> 
<div></div> 
<div class="Clearfix"> 
<div></div> 
<div></div> 
<span></span><span class="time">Time1</span> 
</div> 
<div></div> 
<div class="Clearfix"> 
<div></div> 
<div></div> 
<span></span><span class="time">Time2</span> 
</div><div></div> 
<div class="Clearfix"> 
<div></div> 
<div></div> 
<span></span><span class="time">Time3</span> 
</div> 

我用下面的C#代碼來獲取所有times項目:

var node_1 = htmlDocument.DocumentNode.SelectNodes("//div[@class='form-wrapper']").First(); 
var ITEM = node_1.SelectNodes("//div[@class='clearfix']"); 
for (int Node = 0; Node < ITEM.Count; Node++) 
{ 
    Console.WriteLine(ITEM[Node].SelectNodes("//span[@class='time']")[1].InnerText.Trim()); 
} 
Console.ReadKey(); 

我拍攝第一()「Form-wrapper」,因爲它們很多。

我嘗試過使用:

foreach (var Node in node_1.SelectNodes("//div[@class='clearfix']")) 
{ 
// 
} 

問題:你可以看到我有4 Clearfix類,所以我需要得到的結果是:

Time 
Time1 
Time2 
Time3 

但對於一些我只能得到的原因:

Time 
Time 
Time 
Time 

回答

2
  1. 當您查詢某個節點時,您在開始時不需要//,如果您要添加它,查詢將在整個文檔中執行。

  2. 你需要採取第一個節點選擇之後,所以你需要採取節點與指數01

這2點,將解決你的問題,但也有一些改進,你可以做

  1. 相反的SelecNodes().First()可以用戶SelectSingleNode()
  2. 如果你不需要對父節點的任何信息,您可以直接查詢 爲子節點 - htmlDocument.SelectNodes("\\span[@class='time']")將完成所有工作