XPath: что можно выбрать? - PullRequest
2 голосов
/ 12 ноября 2009

Правильно ли я считаю, что выражение XPath может указывать / выбирать только элемент или атрибут элемента?

Ответы [ 3 ]

7 голосов
/ 12 ноября 2009

Согласно документации XPath на W3C :

Выражение вычисляется для получения объект, который имеет один из следующих четыре основных типа:

  • набор узлов (неупорядоченный набор узлов без дубликатов)
  • логическое (истина или ложь)
  • число (число с плавающей запятой)
  • строка (последовательность символов UCS)

Узлы являются элементами дерева документа, поэтому они могут включать узлы элементов, узлы атрибутов и текстовые узлы. И обратите внимание, что выражение XPath может выбирать несколько узлов, то есть количество элементов, а не только один.

Некоторые примеры:

  • //monkey - выберет все <monkey> элементов в документе, набор узлов
  • count(//monkey) - вернет количество всех <monkey> элементов, число
  • contains("mouse", "cat") - вернет false, логическое значение
  • (//monkey)[0]/text() - вернет текст из первого <monkey> элемента, строка
1 голос
/ 13 ноября 2009

В настоящее время принятый ответ Дейва Уэбба только частично правильный .

Можно выбрать все семь типов узлов :

  • Root (узел документа), как в "/"
  • Элементы , как в: "/*"
  • Атрибуты , как в: "//@*"
  • Текстовые узлы , как в: "//text()"
  • Узлы комментариев , как в: "//comment()"
  • Обработка инструкций узлов , как в: "//processing-instruction()"
  • Узлы пространства имен , как в: "//namespace::*"

Также полезно знать, что в зависимости от хоста данного механизма XPath выбранный набор узлов может содержать узлы из более чем одного документа. Например, если хост XSLT, следующее выражение XPath:

"document($uri1)//* | document($uri2)//*"

выбирает объединение всех элементов в документе, обозначенных $uri1, и всех элементов в документе, обозначенных $uri2.

Порядок узлов в выбранном наборе узлов - это «порядок документов» (как показано в глубине), но это относится только к узлам, принадлежащим одному и тому же документу. Если выбраны узлы, принадлежащие более чем одному документу, порядок расположения узлов, принадлежащих разным документам, не определяется (зависит от реализации).

Наконец, в XPath 2.0 выбор также может быть последовательностью элементов любого типа (возможно смешанных) (и имеющих предопределенный порядок), и существует потенциально неограниченный набор типов элементов (если используются определяемые пользователем типы ), включая все встроенные типы XML-схем.

В XPath 2.1 (рабочий проект W3C, как ожидается, будет опубликован, как мы говорим), будет также тип «функция-элемент», поскольку функции станут первоклассными типами языка и могут быть переданы в качестве параметров возвращается функцией, сохраняется в последовательности или динамически создается.

1 голос
/ 12 ноября 2009

Поскольку вы можете свободно использовать операторы множеств, вы можете выбирать практически все.

//x | //@x

должен предоставить вам список всех x-элементов и всех x-атрибутов, если я правильно запомнил синтаксис. (труба является оператором объединения)

...