2009-07-07 120 views
25

我使用Html Agility Pack在網頁上運行xpath查詢。我想查找包含某個有趣元素的表格中的行。在下面的例子中,我想獲取第二行。Xpath查詢以查找包含某個後裔的元素

<table name="important"> 
<tr> 
    <td>Stuff I'm NOT interested in</td> 
</tr> 
<tr> 
    <td>Stuff I'm interested in</td> 
    <td><interestingtag/></td> 
    <td>More stuff I'm interested in</td> 
</tr> 
<tr> 
    <td>Stuff I'm NOT interested in</td> 
</tr> 
<tr> 
    <td>Stuff I'm NOT interested in</td> 
</tr> 
</table> 

我希望做這樣的事情:

//table[@name='important']/tr[has a descendant named interestingtag] 

除非有有效的XPath語法。 ;-)

我想我可以只找到有趣的元素本身,然後從返回的節點繼續工作到父鏈,但似乎應該有辦法一步完成此操作,而我只是很密集。

回答

46

「有一個名爲interestintag後裔」在XPath中的拼寫.//interestintag,所以你正在尋找的表達式爲:

//table[@name='important']/tr[.//interestingtag] 
19

其實,你需要尋找的後裔,不是一個孩子:

//table[@name='important']/tr[descendant::interestingtag] 
+0

或者,@ mirod的方式也可以。 :-) – 2009-07-07 18:31:43

+0

優秀。這非常有幫助。對不起,我不能接受兩個答案! – 2009-07-07 18:33:02

8

我知道這是不是OP問什麼,但如果你想發現了與特定屬性後代的元素,你可以做這樣的事情:

//table[@name='important']/tr[.//*[@attr='value']]