什么XPath在包含X之后选择下一个?

时间:2009-08-23 03:59:33

标签: xhtml xpath

<tr>
 <td>Blah!</td>
 <td>X</td> <!-- TR containing X -->
 <td>Woot!</td>
</tr>
<tr>
 <td>Useful Data, contents unknown</td> <!-- Select this TR -->
</tr>
<tr>
 <td>Useless data</td> <!-- Don't select this or any subsequent TR -->
</tr>
<tr>
 <td>More crap I don't want</td>
</tr>
<tr>
 <td>X</td> <!-- Another X -->
</tr>
<tr>
 <td>Useful</td> <!-- Do select this one, since previous has X -->
</tr>

XPath会在包含X的<tr>之后立即返回<tr>吗?

3 个答案:

答案 0 :(得分:43)

ChaosPandion和Martinv.Löwis的答案都适用于您提供的样本,但如果您要求 next tr,那么可能在某些情况下,同一个表中还有其他tr元素。在这种情况下,答案将给出以下所有或后续兄弟tr元素。

同样通过标题问题而不是样本,xpath应该允许X在th而不是td中。而且我猜你只需要以下tr,如果它在同一个父母(thead,tbody,tfoot)中。

所以我选择

//tr[* = 'X']/following-sibling::tr[1]

答案 1 :(得分:16)

这应该有用。

tr[td/text() = 'X']/following-sibling::node()

答案 2 :(得分:10)

//td[.='X']/following::tr