Синтаксис XPath

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

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.

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

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