Có XML sau:
<node>Text1<subnode/>text2</node>
Làm cách nào để tôi chọn nút văn bản thứ nhất hoặc thứ hai qua XPath?
Một cái gì đó như thế này:
/node/text()[2]
tất nhiên không hoạt động vì đó là kết quả hợp nhất của mọi văn bản bên trong nút.
Có XML sau:
<node>Text1<subnode/>text2</node>
Làm cách nào để tôi chọn nút văn bản thứ nhất hoặc thứ hai qua XPath?
Một cái gì đó như thế này:
/node/text()[2]
tất nhiên không hoạt động vì đó là kết quả hợp nhất của mọi văn bản bên trong nút.
Câu trả lời:
Có XML sau:
<node>Text1<subnode/>text2</node>Làm cách nào để tôi chọn nút văn bản thứ nhất hoặc thứ hai qua XPath?
Sử dụng :
/node/text()
Cái này chọn tất cả các nút con văn bản của phần tử trên cùng (được đặt tên là "nút") của tài liệu XML.
/node/text()[1]
Cái này chọn con nút văn bản đầu tiên của phần tử trên cùng (được đặt tên là "nút") của tài liệu XML.
/node/text()[2]
Cái này chọn con nút văn bản thứ hai của phần tử trên cùng (được đặt tên là "nút") của tài liệu XML.
/node/text()[someInteger]
Cái này chọn con nút văn bản someInteger-th của phần tử trên cùng (được đặt tên là "nút") của tài liệu XML. Nó tương đương với biểu thức XPath sau:
/node/text()[position() = someInteger]
/node[2]không được chọn bất kỳ nút nào nếu tài liệu XML nguồn được định dạng tốt. Theo định nghĩa trong một tài liệu XML được hình thành tốt, chỉ có một yếu tố hàng đầu (duy nhất) - còn được gọi làdocument-element
//*[text()]anyway. /html/text()không hoạt động.
/html/text()không chọn tất cả các nút văn bản trong tài liệu - chỉ các nút văn bản là con (không phải con cháu) của htmlphần tử trên cùng . Bạn có thể muốn /html//text() . Một số kiến thức và hiểu biết về XPath thường được yêu cầu để xây dựng các biểu thức XPath.
xpath của bạn nên hoạt động. tôi đã kiểm tra xpath của bạn và của tôi trong cả triển khai MarkLogic và Zorba Xquery / Xpath.
Cả hai nên làm việc.
/node/child::text()[1] - should return Text1
/node/child::text()[2] - should return text2
/node/text()[1] - should return Text1
/node/text()[2] - should return text2
/node/text()[2][...] không hoạt động vì đó là kết quả hợp nhất của mọi văn bản bên trong nút Điều đó sai: nó có nghĩa là nút con văn bản thứ hai củanodephần tử gốc . Các giá trị chuỗi (nối các nút văn bản hậu duệ) sẽ làstring(/node)