Синтаксис XPath Syntax


XPath использует выражения путей для выбора узлов или наборов узлов в XML-документе. Узлы выбираются путём следования по пути или шагам.


Пример XML-документа

Мы будем использовать этот XML-документ в приведённых ниже примерах.

Пример

<?xml version="1.0" encoding="UTF-8"?> <bookstore> <book> <title lang="eng">Harry Potter</title> <price>29.99</price> </book> <book> <title lang="eng">Изучение XML</title> <price>39.95</price> </book> </bookstore>


Выбор узлов

XPath использует выражения пути для выбора узлов в XML-документе. Узлы выбираются путем следования по пути или шагам. Ниже перечислены наиболее полезные выражения пути:

Выражение Описание
nodename Выбирает все дочерние узлы этого узла.
/ Выбирает из корневого узла (берет дочерние узлы).
// Выбирает узлы в документе от текущего узла, соответствующие выбору, независимо от их позиции (берет узлы-потомки).
. Выбирает текущий узел.
.. Выбирает родителя текущего узла.
@ Выбирает атрибуты.

В таблице ниже мы перечислили некоторые выражения пути и результаты этих выражений:

Выражение пути Результат
bookstore Выбирает все узлы с именем bookstore.
/bookstore

Выбирает корневой элемент bookstore.

Примечание: если путь начинается с прямой косой черты ( / ), этот путь всегда представляет абсолютный путь к элементу!

bookstore/book Выбирает все элементы book, которые являются дочерними для bookstore.
//book Выбирает все дочерние элементы book независимо от их позиции в документе.
bookstore//book Выбирает все элементы book, которые являются потомками элемента bookstore, независимо от того, где они расположены под bookstore.
//@lang Выбирает все атрибуты с именем lang.


Предикаты

Предикаты используются для поиска конкретного узла или узла, содержащего указанное значение.

Предикаты заключаются в квадратные скобки.

В приведённой ниже таблице мы перечислили некоторые выражения путей с предикатами и результаты этих выражений:

Выражение пути Результат
/bookstore/book[1] Выбирает первый элемент book, являющийся дочерним элементом bookstore.
/bookstore/book[last()] Выбирает последний элемент book, являющийся дочерним элементом bookstore.
/bookstore/book[last()-1] Выбирает предпоследний элемент book, являющийся дочерним элементом bookstore.
/bookstore/book[position()<3] Выбирает первые элементы book, являющиеся дочерними элементами элемента bookstore.
//title[@lang] Выбирает все элементы title, имеющие атрибут с именем lang.
//title[@lang='eng'] Выбирает все элементы title, имеющие атрибут lang со значением eng.
/bookstore/book[price>35.00] Выбирает все элементы book элемента bookstore, и значение их элемента price должно быть больше 35.00.
/bookstore/book[price>35.00]//title Выбирает все элементы title элементов book в элементе bookstore, и значение их элемента price должно быть больше 35.00.


Выбор неизвестных узлов

Подстановочные знаки XPath можно использовать для выбора неизвестных элементов XML.

Подстановочный знак Описание
* Соответствует любому узлу элемента.
@* Соответствует любому узлу атрибута.
node() Соответствует любому типу узла.

В таблице ниже мы перечислили некоторые выражения пути и результаты этих выражений:

Выражение пути Результат
/bookstore/* Выбирает все дочерние элементы элемента bookstore.
//* Выбирает все элементы в документе.
//title[@*] Выбирает все элементы title, имеющие атрибуты.


Выбор нескольких путей

Используя оператор "|" в выражениях пути, можно выбрать несколько путей.

В таблице ниже мы перечислили некоторые выражения пути и результаты этих выражений:

Выражение пути Результат
//book/title | //book/price Выбирает все элементы title и price элементов book.
//title | //price Выбирает все элементы title и price в документе.
/bookstore/book/title | //price Выбирает все элементы title элементов book, принадлежащих элементу bookstore, а также все элементы price в документе.
Другие расширения