при помощи сокращенного синтаксиса значительно проще. В следующем списке перечислен ряд примеров путей расположения с использованием сокращенного синтаксиса:
•
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
. Ниже показан результат, отображающий все элементы
XPath находится в стадии обновления, и в него включаются средства поддержки XSLT 2.0 (см. www.w3.org/TR/xpath20req). Задачи XPath 2.0 следующие:
• упрощение операций с содержимым типов, поддерживаемых схемой XML;
• упрощение операций со строковым содержимым;
• поддержка соответствующих стандартов XML;
• улучшение удобства использования;
• улучшение функциональной совместимости;
• улучшение поддержки международных языковых средств;
• сохранение обратной совместимости;
• повышенная эффективность процессора.
Следующий список дает обзор требований XPath. Главные пункты — поддержка схемы XML и регулярных выражений, что дает средства работы со строками и поиска в строках. (Дополнительную информацию о регулярных выражениях можно почерпнуть по адресу В соответствии с W3C, XPath 2.0: