Пример 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 текущего узла |