Какой XPath выбирает следующую <tr>после <tr>, содержащей X? - PullRequest
37 голосов
/ 23 августа 2009
<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?

Ответы [ 3 ]

43 голосов
/ 23 августа 2009

Ответы ChaosPandion и Martin v. Löwis оба работают для образца, который вы даете, но если вы запрашиваете next tr, то, вероятно, в некоторых случаях в той же таблице есть дополнительные элементы tr В этом случае ответы дадут все следующие или последующие элементы tr.

Кроме того, исходя из вопроса заголовка, а не образца, xpath, вероятно, должен учитывать, что X находится в сотой ячейке, а не в td. И я предполагаю, что вы хотели бы только следующий tr, если он находится в том же родительском (thead, tbody, tfoot).

Так что я бы пошел на

//tr[* = 'X']/following-sibling::tr[1]
16 голосов
/ 23 августа 2009

Это должно работать.

tr[td/text() = 'X']/following-sibling::node()
10 голосов
/ 23 августа 2009
//td[.='X']/following::tr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...