Tài liệu XML:
<Home>
<Addr>
<Street>ABC</Street>
<Number>5</Number>
<Comment>BLAH BLAH BLAH <br/><br/>ABC</Comment>
</Addr>
</Home>
Biểu thức XPath:
//*[contains(text(), 'ABC')]
//*
phù hợp với bất kỳ yếu tố hậu duệ của nút gốc . Đó là, bất kỳ phần tử nào ngoài nút gốc.
[...]
là một vị ngữ , nó lọc tập hợp nút. Nó trả về các nút đó ...
là true
:
Một vị từ lọc một tập hợp nút [...] để tạo một tập hợp nút mới. Đối với mỗi nút trong tập hợp nút được lọc, PredicateExpr được ước tính [...]; nếu PredicateExpr đánh giá là đúng cho nút đó, thì nút được bao gồm trong tập hợp nút mới; mặt khác, nó không được bao gồm.
contains('haystack', 'needle')
trả về true
nếu haystack
chứa needle
:
Hàm: boolean chứa (chuỗi, chuỗi)
Hàm chứa trả về true nếu chuỗi đối số thứ nhất chứa chuỗi đối số thứ hai và ngược lại trả về false.
Nhưng contains()
lấy một chuỗi làm tham số đầu tiên của nó. Và nó đã thông qua các nút. Để giải quyết vấn đề đó, mọi nút hoặc tập hợp nút được truyền khi tham số đầu tiên được chuyển đổi thành chuỗi bởi string()
hàm:
Một đối số được chuyển đổi thành kiểu chuỗi như thể bằng cách gọi hàm chuỗi.
string()
Hàm trả về string-value
của nút đầu tiên :
Một tập hợp nút được chuyển đổi thành một chuỗi bằng cách trả về giá trị chuỗi của nút trong tập hợp nút đầu tiên theo thứ tự tài liệu. Nếu tập hợp nút trống, một chuỗi trống được trả về.
string-value
của một nút phần tử :
Giá trị chuỗi của một nút phần tử là nối các giá trị chuỗi của tất cả các hậu duệ nút văn bản của nút phần tử theo thứ tự tài liệu.
string-value
của một nút văn bản :
Giá trị chuỗi của nút văn bản là dữ liệu ký tự.
Vì vậy, về cơ bản string-value
là tất cả các văn bản được chứa trong một nút (nối của tất cả các nút văn bản con cháu).
text()
là một bài kiểm tra nút phù hợp với bất kỳ nút văn bản nào:
Văn bản kiểm tra nút () đúng với bất kỳ nút văn bản nào. Ví dụ: child :: text () sẽ chọn nút con văn bản của nút bối cảnh.
Như đã nói, //*[contains(text(), 'ABC')]
khớp với bất kỳ phần tử nào (trừ nút gốc), nút văn bản đầu tiên chứa ABC
. Vì text()
trả về một tập hợp nút chứa tất cả các nút văn bản con của nút bối cảnh (liên quan đến biểu thức được ước tính). Nhưng contains()
chỉ mất cái đầu tiên. Vì vậy, đối với tài liệu trên đường dẫn khớp vớiStreet
phần tử.
Biểu thức sau //*[text()[contains(., 'ABC')]]
phù hợp với bất kỳ phần tử nào (nhưng nút gốc), có ít nhất một nút văn bản con, có chứa ABC
. .
đại diện cho nút bối cảnh. Trong trường hợp này, đó là nút văn bản con của bất kỳ phần tử nào ngoại trừ nút gốc. Vì vậy, đối với tài liệu trên đường dẫn khớp với Street
và các Comment
yếu tố.
Bây giờ, sau đó, //*[contains(., 'ABC')]
khớp với bất kỳ phần tử nào (nhưng nút gốc) có chứa ABC
(trong phần nối của các nút văn bản con cháu). Đối với tài liệu ở trên, nó khớp với các Home
phần tử Addr
, các Street
, và các Comment
phần tử. Như vậy, //*[contains(., 'BLAH ABC')]
phù hợp với Home
, các Addr
và các Comment
yếu tố.
//*[contains(text(),'ABC')]
chỉ trả về<Street>
phần tử. Nó không trả lại bất kỳ tổ tiên của<Street>
hoặc<Comment>
.