Пример XML документа
Для демонстрации осей XPath будет использоваться следующий XML документ.
<?xml version="1.0" encoding="UTF-8"?>
<messages>
<note>
<heading date="10/01/2008">Напоминание</heading>
<body>Отправить письмо!</body>
</note>
<note>
<heading date="11/01/2008">Re: Напоминание</heading>
<body>Письмо отправлено</body>
</note>
</messages>
Оси XPath
Ось определяет отношение узлового набора по отношению к текущему узлу.
| Название оси | Результат |
|---|---|
| ancestor | Выбирает всех предков текущего узла |
| ancestor-or-self | Выбирает всех предков текущего узла и сам текущий узел |
| attribute | Выбирает все атрибуты текущего узла |
| child | Выбирает всех прямых потомков текущего узла |
| descendant | Выбирает всех потомков текущего узла |
| descendant-or-self | Выбирает всех потомков текущего узла и сам текущий узел |
| following | Выбирает все элементы в документе после закрывающего тега текущего узла |
| following-sibling | Выбирает все элементы одного уровня после текущего узла |
| namespace | Выбирает все узлы пространства имен текущего узла |
| parent | Выбирает родителя текущего узла |
| preceding | Выбирает все узлы, которые появляются перед текущим узлом, за исключением предков, узлов атрибутов и пространства имен |
| preceding-sibling | Выбирает все элементы одного уровня до текущего узла |
| self | Выбирает текущий узел |
Выражение пути выборки
Путь выборки может быть абсолютным или относительным.
Абсолютный путь выборки начинается с символа косой черты ( / ), а относительный нет. В обоих случаях такой путь содержит один или более шагов, разделенных косой чертой:
Абсолютный путь:
/шаг/шаг/...
Относительный путь:
шаг/шаг/...
Каждый шаг вычисляется по отношению к узлам в текущем узловом наборе.
Шаг содержит:
- ось (определяет древовидное отношение между выбранными узлами и текущим узлом)
- проверка узла (определяет узел внутри оси)
- ноль или больше предикатов (для более точного указания выбранного узлового набора)
Синтаксис для шага выборки имеет следующий вид:
имяОси::проверкаУзла[предикат]
Примеры
| Пример | Результат |
|---|---|
| child::note | Выбирает все узлы note, которые являются прямыми потомками текущего узла |
| attribute::date | Выбирает атрибут date текущего узла |
| child::* | Выбирает всех прямых потомков текущего узла |
| attribute::* | Выбирает все атрибуты текущего узла |
| child::text() | Выбирает все текстовые узлы текущего узла |
| child::node() | Выбирает всех прямых потомков текущего узла |
| descendant::note | Выбирает всех потомков note текущего узла |
| ancestor::note | Выбирает всех предков note текущего узла |
| ancestor-or-self::note | Выбирает всех предков note текущего узла, а также сам текущий узел, если это узел note |
| child::*/child::heading | Выбирает всех прямых потомков прямых потомков ("внуков") heading текущего узла |