2011-06-08 57 views
0

,以便檢索以下HTML(注意嵌套表)我使用HtmlAgilityPack:HtmlAgilityPack跳過或刪除嵌套表

<table class="123"> 
<tr> 
    <table class="789"> 
    <tr> 
     <td>abc</td> 
    </tr> 
    <tr> 
     <td>def</td> 
    </tr> 
    </table> 
</tr> 

<tr> 
    <td>info 1</td> 
</tr> 

<tr> 
    <td>info 2</td> 
</tr> 

<tr> 
    <td>info 3</td> 
</tr> 
</table> 

現在,我試圖找到一種聰明的方法來獲得一些信息從父表和嵌套表的一些信息...

到目前爲止,我有以下幾點:

var parentTable = document.DocumentNode.SelectNodes("//table[@class='123']").FirstOrDefault(); 

var nestedTable = parentTable.SelectNodes("//table[@class='789']").FirstOrDefault(); 

我現在可以玩的nestedTable得到我想要的東西(ABC,DEF)...

但是,當我試圖讓<tr>「從父表就像這樣:

var parentTableRows = parentTable.SelectNodes(".//tr"); 

它似乎包括(集合中)的<tr>的距離嵌套表...

換句話說,根據上面的html代碼,我期待有一個4 <tr>的集合,但由於它包含嵌套表中的<tr>,收到6 <tr>的收藏。

我怎樣才能跳過第一<tr>,恰好持有嵌套表,所以我可以玩得到我想要的信息(INFO1,INFO2,INFO3) (希望我做的意義...)

提前致謝!

回答

0

//是XPATH表達式,意思是「掃描所有節點和子節點」。這就是爲什麼//tr獲得低於根的所有tr。

如果你只是做parentTable.SelectNodes("tr")(或"./tr"這是等價的),你會選擇所有TR根號之下。

如果你想跳過第一個,那麼你可以在元素的position()(一個XPATH功能)添加一個XPATH過濾器:

var parentTableRows = parentTable.SelectNodes("tr[position() > 1]"); 
+0

完美的感謝! – Vlince 2011-06-08 20:07:04