2009-08-23 3 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> 

X가 포함 된 <tr> 바로 뒤에 어떤 XPath가 <tr>을 반환할까요?X가 들어있는 <tr> 뒤에 XPath가 다음 <tr>을 선택합니까?

답변

36

ChaosPandion의와 마틴 V. Löwis의 답변 모두 당신이주는 샘플 작업,하지만 당신은 다음 그럴 필요를 요구하는 경우, 다음 아마 어떤 경우에는 같은 테이블에서 더 그럴 요소가있다. 이 경우, 답안은 다음 또는 형제 자매의 모든 요소를 ​​제공합니다.

표제보다는 표제 질문을 통해 xpath는 아마도 td 대신 th 셀에있는 X를 허용해야합니다. 그리고 같은 부모 (thead, tbody, tfoot)에 있다면 다음 tr 만 원한다고 추측합니다.

그래서 나는

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

이렇게하면됩니다.

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