Пути адресации
Хотя пути адресации (location path) и не являются самой главной грамматической конструкцией языка ( - это частный случай ), они имеют самое большое значение, а потому будут описаны в первую очередь.
Каждый путь адресации может быть описан с помощью простого, но довольно громоздкого синтаксиса. Существует также ряд синтаксических аббревиатур для краткого обозначения основных случаев. Сперва в этой главе с помощью развернутого синтаксиса будет дано разъяснение семантики путей адресации. Затем будет показано, каким образом сокращенный синтаксис приводится к развернутому (см. ).
Ниже приводятся некоторые примеры путей адресации, использующих развернутый синтаксис:
child::para находит элемент para, являющийся непосредственным потомком узла контекста
child::* собирает все элементы, являющиеся непосредственными потомками узла контекста
child::text() собирает все текстовые узлы, являющиеся непосредственными потомками узла контекста
child::node() собирает все непосредственные потомки текущего узла контекста независимо от типа этих узлов
attribute::name в текущем узле контекста находит атрибут name
attribute::* собирает все атрибуты в текущем узле контекста
descendant::para среди потомков узла контекста находит элементы para
ancestor::div собирает все предки div текущего узла контекста
ancestor-or-self::div собирает предки div текущего узла контекста и также, если сам узел контекста тоже является элементом div, включает в набор и его
descendant-or-self::para среди потомков узла контекста выбирает элементы para а также, если сам узел контекста является элементом para, то включает в набор и его
self::para выбирает текущий узел контекста, если это элемент para, либо в противном случае не выбирает ничего
child::chapter/descendant::para выбирает элементы para среди потомков элемента chapter, являющегося непосредственным потомком текущего узла контекста
child::*/child::para собирает все para, являющиеся потомками текущего узла контекста во втором поколении
/ находит корень документа (который всегда является родителем элемента документа)
/descendant::para в документе, которому принадлежит узел контекста, находит все элементы para