Xpath查询以查找包含某个后代的元素

时间:2009-07-07 18:14:12

标签: xpath

我正在使用Html Agility Pack在网页上运行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语法。 ; - )

我想我可以找到有趣的元素本身,然后从返回的节点向上移动父链,但似乎应该有一种方法可以一步完成这一步而我只是在做致密的。

4 个答案:

答案 0 :(得分:50)

“有一个名为interestintag的后代”在XPath中拼写为.//interestintag,因此您要查找的表达式为:

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

答案 1 :(得分:19)

实际上,你需要寻找一个后代,而不是一个孩子:

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

答案 2 :(得分:8)

我知道这不是OP所要求的,但是如果你想找到一个带有特定属性的后代的元素,你可以这样做:

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

答案 3 :(得分:0)

我知道这是一个迟来的答案,但为什么不反过来。找到所有<interestingtag/>标签,然后选择父<tr>标签。

//interestingtag/ancestor::tr