=> Главная База Знаний Xslt Сокращенный синтаксис xpath


Сокращенный синтаксис xpath

Сокращенный синтаксис XPath

Сокращения синтаксиса XPath могут быть весьма удобными. Ниже приведены правила:

• 

self::node()
может быть сокращено как
.
;

• 

parent::node()
может быть сокращено как
..
;

• 

child::childname
может быть сокращено как
childname
;

• 

attribute::childname
может быть сокращено как
@childname
;

• 

/descendant-or-self::node()/
может быть сокращено как
//
.

Например, путь расположения

.//PLANET
— сокращение для
self::node()/descendant-or-self::node()/child::PLANET
. Можно также сократить выражение предиката
[position()=3]
как
[3]
,
[position()=last()]
как
[last()]
и т.д. Работать с путями расположения XPath при помощи сокращенного синтаксиса значительно проще. В следующем списке перечислен ряд примеров путей расположения с использованием сокращенного синтаксиса:

• 

PLANET
возвращает дочерние элементы
<PLANET>
контекстного узла;

• 

*
возвращает все дочерние элементы контекстного узла;

• 

text()
возвращает все дочерние текстовые узлы контекстного узла;

• 

@UNITS
возвращает атрибут
UNITS
контекстного узла;

• 

@*
возвращает все атрибуты контекстного узла;

• 

PLANET[3]
возвращает третьего ребенка
<PLANET>
контекстного узла;

• 

PLANET[last()]
возвращает последнего ребенка
<PLANET>
контекстного узла;

• 

*/PLANET
возвращает всех внуков
<PLANET>
контекстного узла;

• 

/PLANETS/PLANET[3]/NAME[2]
возвращает второй элемент
<NAME>
третьего элемента
<PLANET>
элемента
<PLANETS>
;

• 

//PLANET
возвращает всех потомков
<PLANET>
корня документа;

• 

PLANETS//PLANET
возвращает элементы-потомки
<PLANET>
дочерних элементов
<PLANETS>
контекстного узла;

• 

//PLANET/NAME
возвращает все элементы
<NAME>
, у которых есть родитель
<PLANET>
;

• 

.
возвращает сам контекстный узел;

• 

.//PLANET
возвращает элементы-потомки
<PLANET>
контекстного узла;

• 

..
возвращает родителя контекстного узла;

• 

../@UNITS
возвращает атрибут
UNITS
родителя контекстного узла;

• 

.//..
возвращает всех родителей потомка контекстного узла и родителя контекстного узла;

• 

PLANET[NAME]
возвращает детей
<PLANET>
контекстного узла, у которых есть дети
<NAME>
;

• 

PLANET[NAME="Venus"]
возвращает детей
<PLANET>
контекстного узла, у которых есть дети
<NAME>
с текстом, равным «Venus»;

• 

PLANET[@UNITS="days"]
возвращает всех детей
<PLANET>
контекстного узла, у которых есть атрибут
UNITS
со значением «
days
»;

• 

PLANET[6][@UNITS="days"]
возвращает шестого ребенка
<PLANET>
контекстного узла, только если у этого ребенка есть атрибут
UNITS
со значением «days». Можно также написать
PLANET[@UNITS="days"][6]
;

• 

PLANET[@COLOR and @UNITS]
возвращает всех детей
<PLANET>
контекстного узла, у которых есть атрибут
COLOR
и атрибут
UNITS
;

• "

//PLANET[not(.=preceding::PLANET)]
" выбирает все элементы
<PLANET>
, значение которых отлично от значения любого предшествующего элемента
<PLANET>
;

• 

*[1][self::NAME]
выбирает любой элемент
<NAME>
, который является первым ребенком своего родителя;

• 

*[position() < 5][@UNITS]
выбирает первых пятерых детей контекстного узла, у которых есть атрибут
UNITS
.