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

Jer*_*ein 34 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>
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

//table[@name='important']/tr[has a descendant named interestingtag]
Run Code Online (Sandbox Code Playgroud)

除了有效的xpath语法.;-)

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

mir*_*rod 55

"有一个名为interestintag的后代" .//interestintag在XPath中拼写,所以你要找的表达式是:

//table[@name='important']/tr[.//interestingtag]
Run Code Online (Sandbox Code Playgroud)


Sco*_*ker 19

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

//table[@name='important']/tr[descendant::interestingtag]
Run Code Online (Sandbox Code Playgroud)

  • 我总是觉得有很多方法可以在XPath中获得所需的结果.我相信// table [@ name ='important'] // interestingtag // ancestor :: tr应该也可以工作我相信. (2认同)

Ton*_*ham 8

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

//table[@name='important']/tr[.//*[@attr='value']]
Run Code Online (Sandbox Code Playgroud)