Шрифт:
•
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
. Проверка выражений XPath
В пакет Xalan входит удобная программа-пример, ApplyXPath.java, позволяющая применить выражение XPath к документу и посмотреть на результат, что очень помогает при тестировании. Для запуска этого примера вам нужно будет скомпилировать
ApplyXPath.java
в ApplyXPath.class
при помощи утилиты java.exe, входящей в поставку Java. В качестве примера я применю выражение XPath «
PLANET/NAME
» к planets.xml
при помощи ApplyXPath.class
. Ниже показан результат, отображающий все элементы <NAME>
, дочерние по отношению к элементам <PLANET>
(теги <output>
добавлены программой ApplyXPath):