Грамматика XPath

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

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

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

<?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>

Выберите узел

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

Ниже приведены наиболее полезные выражения путей:

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

Пример

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

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

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

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

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

Определители (Predicates)

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

Определители заключены в фигурные скобки.

Пример

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

Выражение пути Результат
/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 элемента 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, принадлежащие элементу bookstore, и все элементы price в документе.