В настоящее время принятый ответ Дейва Уэбба только частично правильный .
Можно выбрать все семь типов узлов :
- Root (узел документа), как в
"/"
- Элементы , как в:
"/*"
- Атрибуты , как в:
"//@*"
- Текстовые узлы , как в:
"//text()"
- Узлы комментариев , как в:
"//comment()"
- Обработка инструкций узлов , как в:
"//processing-instruction()"
- Узлы пространства имен , как в:
"//namespace::*"
Также полезно знать, что в зависимости от хоста данного механизма XPath выбранный набор узлов может содержать узлы из более чем одного документа. Например, если хост XSLT, следующее выражение XPath:
"document($uri1)//* | document($uri2)//*"
выбирает объединение всех элементов в документе, обозначенных $uri1
, и всех элементов в документе, обозначенных $uri2
.
Порядок узлов в выбранном наборе узлов - это «порядок документов» (как показано в глубине), но это относится только к узлам, принадлежащим одному и тому же документу. Если выбраны узлы, принадлежащие более чем одному документу, порядок расположения узлов, принадлежащих разным документам, не определяется (зависит от реализации).
Наконец, в XPath 2.0 выбор также может быть последовательностью элементов любого типа (возможно смешанных) (и имеющих предопределенный порядок), и существует потенциально неограниченный набор типов элементов (если используются определяемые пользователем типы ), включая все встроенные типы XML-схем.
В XPath 2.1 (рабочий проект W3C, как ожидается, будет опубликован, как мы говорим), будет также тип «функция-элемент», поскольку функции станут первоклассными типами языка и могут быть переданы в качестве параметров возвращается функцией, сохраняется в последовательности или динамически создается.