Что XPath выбирает следующий <tr> после <tr>, содержащий X?
<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 вернет <tr>
сразу после <tr>
, который содержит X?
Ответы
Ответ 1
ChaosPandion и Martin v. Löwis отвечают, что оба работают для образца, который вы даете, но если вы запрашиваете следующий tr, то, предположительно, в некоторых случаях в одной таблице есть еще три элемента. В этом случае в ответах будут представлены все следующие или последующие элементы tribling.
Также, исходя из вопроса заголовка, а не образца, xpath должен, вероятно, допускать, что X находится в i-й ячейке вместо td. И я предполагаю, что вам нужно только следующее tr, если оно находится в одном и том же родителе (thead, tbody, tfoot).
Итак, я пошел за
//tr[* = 'X']/following-sibling::tr[1]
Ответ 2
Это должно работать.
tr[td/text() = 'X']/following-sibling::node()
Ответ 3
//td[.='X']/following::tr