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

XPath nào sẽ trả lại <tr> ngay sau <tr> có chứa X?XPath nào chọn <tr> tiếp theo sau khi <tr> chứa X?

Trả lời

36

ChaosPandion và Martin v. Câu trả lời cả hai làm việc cho các mẫu mà bạn cung cấp cho Löwis, nhưng nếu bạn đang yêu cầu các tiếp theo tr, sau đó có lẽ trong một số trường hợp có yếu tố tr hơn nữa trong cùng một bảng. Trong trường hợp đó, các câu trả lời sẽ cung cấp tất cả các phần tử sau hoặc anh chị em sau.

Cũng theo câu hỏi dòng tiêu đề chứ không phải mẫu, xpath có thể cho phép X ở trong ô thứ thay vì td. Và tôi đoán rằng bạn chỉ muốn tr sau nếu nó ở trong cùng một bậc cha mẹ (thead, tbody, tfoot).

Vì vậy, tôi muốn đi đến

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

Điều này sẽ hiệu quả.

tr[td/text() = 'X']/following-sibling::node() 
Các vấn đề liên quan