2011-01-06 48 views
6

Tôi gặp sự cố khi trả về một phần tử bằng cách sử dụng xpath. Tôi cần lấy văn bản từ TD thứ 2 từ một bảng lớn.xpath phần tử gần nhất với một phần tử đã cho

<tr> 
<td> 
    <label for="PropertyA">Some text here </label> 
</td> 
<td> TEXT!! </td> 
</tr> 

Tôi có thể tìm phần tử nhãn, nhưng sau đó tôi gặp sự cố khi chọn TD anh em để trả lại văn bản.

Đây là cách tôi chọn nhãn:

"//label[@for='PropertyA']" 

nhờ

Trả lời

16

Bạn đang tìm kiếm các trục following-sibling. Nó tìm kiếm trong anh chị em trong cùng một phụ huynh - có nó là tr. Nếu td s không nằm trong cùng một tr thì chúng không được tìm thấy. Nếu bạn muốn nó thì bạn có thể sử dụng các trục following.

//td[label[@for='PropertyA']]/following-sibling::td[1] 
+0

điều này làm việc tuyệt vời, cảm ơn rất nhiều – nologo

+0

+1 cho việc sử dụng 'sau-sibling' thay vì' theo sau'. Phương pháp cũ là phương pháp mạnh mẽ hơn - ít có khả năng xảy ra lỗi hơn, ví dụ: nếu không có anh chị em sau đây: td nó sẽ không chọn sai td. – LarsH

6

Từ các yếu tố label, nó phải là:

//label[@for='PropertyA']/following::td[1] 

Và sau đó sử dụng phương pháp DOM từ ngôn ngữ lưu trữ để lấy giá trị chuỗi.

Hoặc chọn nút văn bản (một cái gì đó tôi không đề nghị) với:

//label[@for='PropertyA']/following::td[1]/text() 

Hoặc nếu có sẽ chỉ là một này chỉ nút, sau đó bạn có thể sử dụng string() chức năng:

string(//label[@for='PropertyA']/following::td[1]) 

Bạn cũng có thể chọn từ tổ tiên chung tr như:

//tr[td/label/@for='PropertyA']/td[2] 
+0

1. Câu trả lời đầy đủ. – Flack

0

Bắt BẤT CỨ yếu tố sau đây:

// td [nhãn [@ cho = 'PropertyA']]/sau-sibling :: *

Các vấn đề liên quan