Сокращенный синтаксис
Некоторые примеры путей адресации, использующих сокращенный синтаксис:
para находит элемент para, являющийся непосредственным потомком текущего узла контекста
* находит все элементы, являющиеся непосредственными потомками текущего узла контекста
text() находит все текстовые узлы, являющиеся непосредственными потомками текущего узла контекста
@name выделяет атрибут name в текущем узле контекста
@* находит все атрибуты текущего узла контекста
para[1] находит первый непосредственный потомок para текущего узла контекста
para[last()] находит последний непосредственный потомок para текущего узла контекста
*/para находит все потомки во втором поколении para текущего узла контекста
/doc/chapter[5]/section[2] в doc в пятом chapter находит второй section
chapter//para собирает элементы para, являющиеся потомками элемента chapter, который является непосредственным потомком текущего узла контекста
//para собирает все para, являющиеся потомками корневого узла документа, то есть находит все элементы para в том документе, где располагается текущий узел контекста
//olist/item в документе, где располагается текущий узел контекста, находит все элементы item, имеющие родителем olist
. выделяет текущий узел контекста
.//para собирает элементы para, являющиеся потомками текущего узла контекста
.. выделяет родителя текущего узла контекста
../@lang выделяет атрибут lang, принадлежащий родителю текущего узла контекста
para[@type="warning"] находит все непосредственные потомки para текущего узла контекста, имеющие атрибут type со значением warning
para[@type="warning"][5] находит пятый по счету из непосредственных потомков para текущего узла контекста, имеющих атрибут type со значением warning
para[5][@type="warning"] извлекает пятый непосредственный потомок para текущего узла контекста, если этот потомок имеет атрибут type со значением warning
chapter[title="Introduction"] получает непосредственный потомок текущего узла контекста chapter, который в свою очередь имеет один или несколько непосредственных потомков title со , равным Introduction
chapter[title] находит непосредственный потомок chapter текущего узла контекста, который имеет один или несколько непосредственных потомков title
employee[@secretary and @assistant] находит все непосредственные потомки employee данного узла контекста, которые имеют оба атрибута secretary и assistant
Самой важной является аббревиатура child::, которую при записи шага адресации всегда можно опустить. Фактически, child используется как ось по умолчанию. Например, путь адресации div/para становится сокращением для child::div/child::para.
Аналогичные аббревиатуры имеются и для атрибутов: attribute:: может быть сокращен до @. Например, путь адресации para[@type="warning"] является сокращением для child::para[attribute::type="warning"], а следовательно, находит непосредственные потомки para, имеющие атрибут type, значение которого равно warning.
// является сокращением для /descendant-or-self::node()/. Например, //para - это сокращение для /descendant-or-self::node()/child::para, а потому будет находить в документе все элементы para (путь //para найдет элемент para, даже если последний является элементом документа, поскольку узел элемента документа является непосредственным потомком корневого узла). div//para - это сокращение для div/descendant-or-self::node()/child::para, а потому находит все потомки para для непосредственного потомка div. Замечание: Путь адресации //para[1] имеет иное значение, чем путь адресации /descendant::para[1]. Последний отыскивает первый элемент-потомок para, а предыдущий находит все элементы-потомки para, являющиеся для своего родителя первым непосредственным потомком para.
Шаг адресации . является сокращением для self::node(). Особенно эта запись полезна в сочетании с //. Например, путь адресации .//para является сокращением для self::node()/descendant-or-self::node()/child::para
а потому будет находить все элементы para, являющиеся потомками текущего узла контекста.
Точно так же, шаг адресации .. является сокращением для parent::node(). Например, ../title - это сокращенная запись для parent::node()/child::title, а потому для родителя текущего узла контекста будет находить непосредственные потомки title.