Подтвердить что ты не робот

Что 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?

4b9b3361

Ответ 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