Trục XPath (Axes)

Tài liệu ví dụ XML

Chúng ta sẽ sử dụng tài liệu XML này trong ví dụ dưới đây:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
  <title lang="eng">Harry Potter</title>
  <price>29.99</price>
</book>
<book>
  <title lang="eng">Learning XML</title>
  <price>39.95</price>
</book>
</bookstore>

Trục XPath

Trục có thể định nghĩa tập các nút so với nút hiện tại.

Tên trục Kết quả
ancestor Chọn tất cả các bậc cao của nút hiện tại (cha, tổ phụ, v.v.).
ancestor-or-self Chọn tất cả các bậc cao của nút hiện tại (cha, tổ phụ, v.v.) và nút hiện tại本身.
attribute Chọn tất cả các thuộc tính của nút hiện tại
child Chọn tất cả các con phần tử của nút hiện tại
descendant Chọn tất cả các phần tử con của nút hiện tại (con, cháu, v.v.).
descendant-or-self Chọn tất cả các phần tử con của nút hiện tại (con, cháu, v.v.) và nút hiện tại本身.
following Chọn tất cả các nút sau dấu đóng kết thúc của nút hiện tại trong tài liệu.
namespace Chọn tất cả các nút không gian tên của nút hiện tại.
parent Chọn nút cha của nút hiện tại.
preceding Chọn tất cả các nút trước dấu mở bắt đầu của nút hiện tại trong tài liệu.
preceding-sibling Chọn tất cả các nút đồng cấp trước nút hiện tại.
self Chọn nút hiện tại.

Bao gồm biểu thức đường dẫn vị trí

Đường dẫn vị trí có thể là tuyệt đối hoặc tương đối.

Đường dẫn tuyệt đối bắt đầu từ dấu chéo ngang ( / ) trong khi đường dẫn tương đối không như vậy. Trong hai trường hợp này, đường dẫn vị trí bao gồm một hoặc nhiều bước, mỗi bước đều được dấu chéo phân隔:

Đường dẫn vị trí tuyệt đối:

/step/step/...

Đường dẫn vị trí tương đối:

step/step/...

Mỗi bước đều được tính toán dựa trên các nút trong bộ các nút hiện tại.

Bước (step) bao gồm:

Trục (axis)
Định nghĩa mối quan hệ cây giữa các nút đã chọn và nút hiện tại
Kiểm tra nút (node-test)
Nhận diện các nút trong một trục cụ thể
Một hoặc nhiều điều kiện (predicate)
Nâng cao hơn để tinh chỉnh bộ các nút đã chọn

Cú pháp bước:

Tên trục::kiểm tra[điều kiện]

Thực tế

Ví dụ Kết quả
child::book Chọn tất cả các nút book thuộc về các phần tử con của nút hiện tại
attribute::lang Chọn thuộc tính lang của nút hiện tại
child::* Chọn tất cả các con phần tử của nút hiện tại
attribute::* Chọn tất cả các thuộc tính của nút hiện tại
child::text() Chọn tất cả các con văn bản của nút hiện tại
child::node() Chọn tất cả các con của nút hiện tại
descendant::book Chọn tất cả các con cháu book của nút hiện tại
ancestor::book Chọn tất cả các bậc tổ tiên book của nút hiện tại
ancestor-or-self::book Chọn tất cả các bậc tổ tiên book của nút hiện tại và nút hiện tại (nếu nút này là nút book)
child::*/child::price Chọn tất cả các con cháu price của nút hiện tại.