我正在使用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语法。 ; - )
我想我可以找到有趣的元素本身,然后从返回的节点向上移动父链,但似乎应该有一种方法可以一步完成这一步而我只是在做致密的。
答案 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