Tôi có tài liệu sau:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
Làm thế nào tôi có thể nhận được giá trị của <cc>
việc sử dụng XPath nếu <bb>
là zz
?
Tôi có tài liệu sau:
<a>
<bb>abc</bb>
<cc>ccc</cc>
<dd>ddd</dd>
</a>
<a>
<bb>zz</bb>
<cc>1</cc>
<dd>2</dd>
</a>
Làm thế nào tôi có thể nhận được giá trị của <cc>
việc sử dụng XPath nếu <bb>
là zz
?
Câu trả lời:
Không chắc tại sao mọi người lại truy vấn anh chị em, bạn cũng có thể kiểm tra các thành phần <bb/>
-elements khớp với vị từ từ <a/>
vị ngữ của:
//a[bb/text() = "zz"]/cc/text()
*-sibling
trục. +1 mặc dù.
Những gì bạn cần là following-sibling
trục XPath
//a/bb[text()="zz"]/following-sibling::cc[1]/text()
Kiểm tra Xpath tại đây: http://www.xpathtester.com/obj/b55ec3ac-dfa4-4f44-81e8-f963ea4a0625
Hỏi: Làm thế nào để chọn một nút bằng XPath nếu nút anh chị em có một giá trị cụ thể?
Bởi vì chỉ có "XPath Axes" cho anh chị em sau và anh chị em trước, bạn có thể sử dụng một trong số chúng nếu vị trí được cố định.
Nhưng tốt hơn:
Hãy tìm kiếm cc
phụ huynh có con bb
có giá trị 'zz'
:
//cc[../bb='zz']
//a[bb = 'zz']/cc
.
Trước hết, ví dụ của bạn không phải là XML được định dạng tốt. Nhìn ra điều đó và bạn không mô tả ý định của mình tốt lắm (Bạn muốn chọn chính xác điều gì với điều kiện nào?), Tôi cho rằng bạn muốn làm điều này:
//cc[preceding-sibling::bb[text()="zz"]]/text()
Nó chọn
TEXT VALUES OF ALL <CC> ELEMENTS
//cc /text()
THAT HAVE A PRECEDING SIBLING <BB>
[preceding-sibling::bb ]
THAT HAS TEXT VALUE EQUAL TO "zz"
[text()="zz"]
Bạn có thể viết cũng như
//bb[text()="zz"]/following-sibling::cc/text()
Vui lòng nhìn vào thông số kỹ thuật , nó có một số ví dụ rất dễ đọc mà từ đó bạn sẽ học được rất nhiều.
//a/cc[../bb='zz']/text()
// a: Chọn tất cả các phần tử 'a' bất kể nó ở đâu.
// a / cc: Chọn các phần tử 'cc' là con của phần tử 'a' (bất kể a ở đâu).
..: Chọn nút cha của nút hiện tại.
[../bb='zz ']: trong đó giá trị của phần tử' bb 'anh chị em là zz.
Một giải pháp khác cho vấn đề này là
//bb[contains(.,'zz')]/../cc/text()
Giải thích : Bất kỳ chuỗi nào bb
chứa 'zz'
chuỗi trong tất cả các nút con bb
sau đó sẽ đến nút cha của nút đó bb
bằng cách sử dụng ..
, bây giờ chúng ta có thể truy cập cc
văn bản trả về như vậy.
Tôi hy vọng lời giải thích đó không phức tạp.