Steps của một expression được phân cách bởi ký tự /, thường được sử dụng để chọn ra các node child . Điều đó không phải lúc nào cũng đúng, nên chúng ta có thể dùng “axis” khác bằng cách dùng ký tự ::.
//
ul
/child::
li
Axis
Step
Axis
Step
Child axis
child:: mặc định là axis. Dưới đây là các ví dụ mà cả hai cách đều giống nhau
VD 1:
//ul/li/a
//child::ul/child::li/child::a
VD 2:
//ul[li]
//ul[child::li]
VD 3:
//ul[count(li) > 2]
//ul[count(child::li) > 2]
Descendant-or-self axis
// là cách viết rút gọn củadescendant-or-self:: axis. Dưới đây là các ví dụ cả hai cách hoạt động giống nhau
VD 1:
//div//h4
//div/descendant-or-self::h4
VD 2:
//ul//[last()]
//ul/descendant-or-self::[last()]
Axes khác
Axis
Abbrev
Notes
ancestor
ancestor-or-self
attribute
@
@href viết tắt cho attribute::href
child
div viết tắt cho child::div
descendant
descendant-or-self
//
//viết tắt cho /descendant-or-self::node()/
namespace
self
.
.viết tắt cho self::node()
parent
..
.. viết tắt cho parent::node()
following
following-sibling
preceding
preceding-sibling
Unions
Ký tự ‘|’ được sử dụng để nối hai biểu thức lại với nhau
//a | //span
Ví dụ
//*
# Tất cả elements
count(//*)
# Đếm tất cả elements
(//h1)[1]/text()
# text của thẻ heading <h1> đầu tiên
//li[span]
# Tìm thẻ <li> với thẻ <span> bên trong nó
# .Có thể viết //li[child::span]
//ul/li/..
# Sử dùng .. để chọn parent
Tìm Parent
//section[h1[@id='section-name']]
Tìm vị trí có thẻ <section> có thẻ con <h1> mà có id là “section-name”
//section[//h1[@id='section-name']]
Tìm vị trí có thẻ <section> có thẻ con <h1> mà có id là “section-name”. Ở đây sử dụng //h1 nghĩa là dùng decendant-or-seft thay cho dùng child