Với XML này, XPath trả về tất cả các phần tử có prop
thuộc tính chứa Foo
(ba nút đầu tiên):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
Với XML này, XPath trả về tất cả các phần tử có prop
thuộc tính chứa Foo
(ba nút đầu tiên):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
Câu trả lời:
//a[contains(@prop,'Foo')]
Hoạt động nếu tôi sử dụng XML này để lấy lại kết quả.
<bla>
<a prop="Foo1">a</a>
<a prop="Foo2">b</a>
<a prop="3Foo">c</a>
<a prop="Bar">a</a>
</bla>
Chỉnh sửa: Một điều cần lưu ý là trong khi XPath ở trên sẽ trả về câu trả lời đúng cho xml cụ thể đó, nếu bạn muốn đảm bảo bạn chỉ nhận được các phần tử "a" trong phần tử "bla", bạn cũng nên sử dụng các phần tử khác đã đề cập
/bla/a[contains(@prop,'Foo')]
Điều này sẽ tìm kiếm cho bạn tất cả các phần tử "a" trong toàn bộ tài liệu xml của bạn, bất kể được lồng trong phần tử "blah"
//a[contains(@prop,'Foo')]
Tôi đã thêm điều này vì mục đích kỹ lưỡng và trên tinh thần stackoverflow. :)
xmlme.com
bây giờ chuyển hướng đến một số máy chủ khác và không xuất hiện để lưu trữ công cụ hoặc bất cứ thứ gì tương tự.
XPath này sẽ cung cấp cho bạn tất cả các nút có thuộc tính chứa 'Foo' bất kể tên nút hoặc tên thuộc tính:
//attribute::*[contains(., 'Foo')]/..
Tất nhiên, nếu bạn quan tâm nhiều hơn đến nội dung của thuộc tính và không nhất thiết là nút cha của chúng, chỉ cần bỏ / ..
//attribute::*[contains(., 'Foo')]
//@*[contains(., 'Foo')]
descendant-or-self::*[contains(@prop,'Foo')]
Hoặc là:
/bla/a[contains(@prop,'Foo')]
Hoặc là:
/bla/a[position() <= 3]
Phân tích:
descendant-or-self::
Trục - tìm kiếm thông qua mọi nút bên dưới và chính nút đó. Nó thường là tốt hơn để nói điều này hơn //. Tôi đã gặp một số triển khai trong đó // có nghĩa là bất cứ nơi nào (người quyết định hoặc tự của nút gốc). Cái khác sử dụng trục mặc định.
* or /bla/a
Thẻ - kết hợp ký tự đại diện và / bla / a là một đường dẫn tuyệt đối.
[contains(@prop,'Foo')] or [position() <= 3]
Điều kiện trong []. @prop là viết tắt cho thuộc tính :: prop, vì thuộc tính là một trục tìm kiếm khác. Ngoài ra, bạn có thể chọn 3 đầu tiên bằng cách sử dụng hàm vị trí ().
John C là gần nhất, nhưng XPath phân biệt chữ hoa chữ thường, vì vậy XPath đúng sẽ là:
/bla/a[contains(@prop, 'Foo')]
Bạn đã thử một cái gì đó như:
// a [chứa (@prop, "Foo")]
Tôi chưa bao giờ sử dụng chức năng chứa trước đó nhưng nghi ngờ rằng nó sẽ hoạt động như quảng cáo ...
Nếu bạn cũng cần khớp nội dung của chính liên kết, hãy sử dụng text ():
//a[contains(@href,"/some_link")][text()="Click here"]
thử cái này:
// a [chứa (@ prop, 'foo')]
nên hoạt động cho bất kỳ thẻ "a" nào trong tài liệu