Оси XPath

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