Аксисы XPath (axis)

Пример 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

Ось может определять набор узлов относительно текущего узла.

Название оси Результат
ancestor Выберите всех предков текущего узла (родителя, дедушку и т.д.).
ancestor-or-self Выберите всех предков текущего узла (родителя, дедушку и т.д.) и сам узел.
attribute Выбрать все атрибуты узла
child Выбрать все дети узла
descendant Выберите всех потомков текущего узла (дочерних, внучатых и т.д.).
descendant-or-self Выберите всех потомков текущего узла (дочерних, внучатых и т.д.) и сам узел.
following Выберите все узлы после конца тега текущего узла в документе.
namespace Выберите все узлы пространства имен текущего узла.
parent Выберите родителя текущего узла.
preceding Выберите все узлы перед началом тега текущего узла в документе.
preceding-sibling Выберите всех同级 узлов перед текущим узлом.
self Выберите текущий узел.

Выражение пути

Путь может быть абсолютным или относительным.

Абсолютный путь начинается с обратной косой черты (/), а относительный путь не таким образом. В обоих случаях путь включает один или несколько шагов, каждый из которых разделен косой чертой:

Абсолютный путь позиции:

/step/step/...

Относительный путь позиции:

step/step/...

Каждый шаг вычисляется на основе узлов в текущем наборе узлов.

Шаг (step) включает:

Ось (axis)
Определение деревенских отношений между выбранным узлом и текущим узлом
Тест узла (node-test)
Идентификация узлов в рамках оси
Ноль или более предикатов (predicate)
Более глубокое уточнение所选ого набора узлов

Грамматика шага:

Имя оси::тест узла[предикат]

Инстанция

Пример Результат
child::book Выбрать все дети узлов, принадлежащие текущему узлу
attribute::lang Выбрать атрибут lang узла
child::* Выбрать все дети узла
attribute::* Выбрать все атрибуты узла
child::text() Выбрать все текстовые дети узла
child::node() Выбрать все дети узла
descendant::book Выбрать всех потомков узла book
ancestor::book Выбрать всех предков узла book
ancestor-or-self::book Выбрать всех предков узла book и текущий узел (если текущий узел является узлом book)
child::*/child::price Выбрать все дети узла price текущего узла.