2009-08-23 12 views
28
<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> 

Co XPath zwróci <tr> natychmiast po <tr>, który zawiera X?Co XPath wybiera następne <tr> po <tr> zawierające X?

Odpowiedz

36

ChaosPandion i Martin v. Odpowiedzi zarówno praca dla próbki dajesz Lowis, ale jeśli jesteś z prośbą o obok tr, to przypuszczalnie w niektórych przypadkach istnieją dalsze elementy TR samej tabeli. W takim przypadku odpowiedzi dadzą wszystkie następujące elementy tr.

Również przechodząc przez nagłówek pytanie zamiast próbki, xpath powinien prawdopodobnie pozwolić, aby X był w komórce zamiast td. I domyślam się, że chciałbyś mieć następującą tr, jeśli jest w tym samym rodzicu (thead, tbody, tfoot).

Więc pójdę do

//tr[* = 'X']/following-sibling::tr[1] 
8
//td[.='X']/following::tr 
10

To powinno zadziałać.

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