• text()возвращает все дочерние текстовые узлы контекстного узла;
• @UNITSвозвращает атрибут UNITSконтекстного узла;
• @*возвращает все атрибуты контекстного узла;
• PLANET[3]возвращает третьего ребенка контекстного узла;
• PLANET[last()]возвращает последнего ребенка контекстного узла;
• */PLANETвозвращает всех внуков контекстного узла;
• /PLANETS/PLANET[3]/NAME[2]возвращает второй элемент третьего элемента элемента ;
• //PLANETвозвращает всех потомков корня документа;
• PLANETS//PLANETвозвращает элементы-потомки дочерних элементов контекстного узла;
• //PLANET/NAMEвозвращает все элементы , у которых есть родитель ;
• .возвращает сам контекстный узел;
• .//PLANETвозвращает элементы-потомки контекстного узла;
• ..возвращает родителя контекстного узла;
• ../@UNITSвозвращает атрибут UNITSродителя контекстного узла;
• .//..возвращает всех родителей потомка контекстного узла и родителя контекстного узла;
• PLANET[NAME]возвращает детей контекстного узла, у которых есть дети ;
• PLANET[NAME="Venus"]возвращает детей контекстного узла, у которых есть дети с текстом, равным «Venus»;
• PLANET[@UNITS="days"]возвращает всех детей контекстного узла, у которых есть атрибут UNITSсо значением « days»;
• PLANET[6][@UNITS="days"]возвращает шестого ребенка контекстного узла, только если у этого ребенка есть атрибут UNITSсо значением «days». Можно также написать PLANET[@UNITS="days"][6];
• PLANET[@COLOR and @UNITS]возвращает всех детей контекстного узла, у которых есть атрибут COLORи атрибут UNITS;
• " //PLANET[not(.=preceding::PLANET)]" выбирает все элементы , значение которых отлично от значения любого предшествующего элемента ;
• *[1][self::NAME]выбирает любой элемент , который является первым ребенком своего родителя;
• *[position() < 5][@UNITS]выбирает первых пятерых детей контекстного узла, у которых есть атрибут UNITS.
В пакет Xalan входит удобная программа-пример, ApplyXPath.java, позволяющая применить выражение XPath к документу и посмотреть на результат, что очень помогает при тестировании. Для запуска этого примера вам нужно будет скомпилировать ApplyXPath.javaв ApplyXPath.classпри помощи утилиты java.exe, входящей в поставку Java.
В качестве примера я применю выражение XPath « PLANET/NAME» к planets.xmlпри помощи ApplyXPath.class. Ниже показан результат, отображающий все элементы , дочерние по отношению к элементам (теги добавлены программой ApplyXPath):
%java ApplyXPath planets.xml PLANET/NAME
MercuryVenusEarth
XPath находится в стадии обновления, и в него включаются средства поддержки XSLT 2.0 (см. www.w3.org/TR/xpath20req). Задачи XPath 2.0 следующие:
• упрощение операций с содержимым типов, поддерживаемых схемой XML;
• упрощение операций со строковым содержимым;
• поддержка соответствующих стандартов XML;
• улучшение удобства использования;
• улучшение функциональной совместимости;
• улучшение поддержки международных языковых средств;
• сохранение обратной совместимости;
• повышенная эффективность процессора.
Следующий список дает обзор требований XPath. Главные пункты — поддержка схемы XML и регулярных выражений, что дает средства работы со строками и поиска в строках. (Дополнительную информацию о регулярных выражениях можно почерпнуть по адресу http://www.perldoc.com/perl5.6/pod/perlre.html.) В соответствии с W3C, XPath 2.0:
• должен поддерживать архитектуру XML W3C, хорошо взаимодействуя с другими стандартами в семействе XML;
• должен выражать свою модель данных в терминах информационного множества (infoset) XML;
• должен предоставлять общий ключевой синтаксис для XSLT 2.0 и XML Query language 1.0;
• должен поддерживать явное сравнение « for any» или « for all» и синтаксис равенства;
• должен расширять множество функций агрегации (например, пользователи XSLT часто требовали добавить функции min()и max());
• должен сохранять обратную совместимость с XPath 1.0;
• должен предоставлять функции пересечения и разности то есть — XPath 1.0 поддерживает объединение двух наборов узлов, и к этому должны быть добавлены функции пересечения и разности;
• должен поддерживать операцию унарного плюса (поскольку в схеме XML у десятичных чисел может присутствовать лидирующий плюс);
• должен улучшать удобство использования;
• должен снизить ограничения на шаги расположения;
Читать дальше