Операторы и специальные символы
Выражения XPath создаются с помощью операторов и специальных символов, приведенных в следующей таблице.
|
Оператор «дочерний элемент»: выбирает непосредственные дочерние элементы коллекции, указанной слева. Если этот оператор пути стоит в начале шаблона, будут выбраны дочерние элементы корневого узла. |
|
Рекурсивный спуск; поиск заданного элемента на любой глубине. Если этот оператор пути стоит в начале шаблона, рекурсивный спуск будет вестись из корневого узла. |
|
Указывает текущий контекст. |
|
Родитель текущего узла контекста. |
|
Символ-шаблон; выбирает все элементы независимо от их имени. |
|
Атрибут; префикс имени атрибута. |
|
Символ-шаблон атрибута; выбирает все атрибуты независимо от имени. |
|
Разделитель пространства имени; отделяет префикс пространства имени от собственно имени элемента или атрибута. |
|
Группирует операции для явного задания порядка их выполнения. |
|
Применяет шаблон фильтра. |
|
Оператор индекса; используется для индексирования коллекции. |
|
Выполняет сложение. |
|
Выполняет вычитание. |
|
Выполняет деление с плавающей запятой по стандарту IEEE 754. |
|
Выполняет умножение. |
|
Возвращает остаток от деления по модулю. |
Данная таблица не включает логические операторы и операторы работы с наборами; они перечислены в разделах Логические выражения, выражения сравнения и выражения набора и Операторы работы с наборами.
Приоритет операций (от высокого к низкому) определяется согласно следующей таблице.
Очередность | Символ | Назначение |
---|---|---|
1 |
|
Группирование |
2 |
|
Фильтры |
3 |
|
Операции с путями |
Оператор группирования, ()
, применим только для выражения пути верхнего уровня. Например, (//author/degree | //author/name)
— допустимая операция группирования, а //author/(degree | name)
— недопустимая.
Операторы шаблонов фильтра ([]
) имеют более высокий приоритет, чем операторы пути (/
и //
). Например, выражение //comment()[3]
выбирает все комментарии с индексом, равным 3, связанные с родительским элементом комментария в любом месте документа. Оно отличается от выражения (//comment())[3]
, выбирающего третий комментарий из множества всех комментариев, связанных с родительским элементом. Первое выражение может вернуть несколько комментариев, а второе — только один.
Эти операторы и специальные символы подробно описаны в данном руководстве.
Операторы пути
С помощью операторов пути (/
и //
) можно описать коллекцию элементов определенного типа. Эти операторы принимают в качестве аргументов коллекцию «с левой стороны», из которой производится выбор, и коллекцию «с правой стороны» как инструкцию, указывающую, какие элементы нужно выбирать. Оператор «дочерний элемент» (/
) производит выбор из непосредственных дочерних элементов левой коллекции, в то время как оператор «потомок» (//
) производит выбор из всех потомков коллекции левой стороны. Оператор //
можно рассматривать как подстановку для одного или нескольких уровней иерархии.
Следует заметить, что операторы пути изменяют контекст по мере выполнения запроса. Соединив несколько операторов пути, можно просмотреть все дерево документа.
Примеры
Выражение | Ссылается на |
---|---|
|
Все элементы |
|
Все элементы |
|
Все элементы |
|
Все элементы |
|
Все элементы |
Символ-шаблон
Элемент можно использовать, не указывая его имя, с помощью коллекции символов-шаблонов (*
). Коллекция *
означает все элементы, являющиеся дочерними для текущего контекста, независимо от имени тега.
Примеры
Выражение | Ссылается на |
---|---|
|
Все дочерние элементы элементов |
|
Все элементы |
|
Все элементы-внуки текущего контекста. |
|
Элемент |
|
Все элементы из пространства имен |
Обратите внимание, что шаблон поиска *:book
не поддерживается.
Атрибуты
В языке XPath имена атрибутов включают символ @
. Атрибуты и дочерние элементы обрабатываются одинаково, и эти два типа считаются эквивалентными везде, где это возможно.
Примечание. |
---|
Атрибуты не могут содержать дочерних элементов, поэтому применение операторов пути к атрибутам порождает синтаксические ошибки. Кроме того, к атрибутам нельзя применять индексы, поскольку их порядок по определению не задан. |
Примеры
Выражение | Ссылается на |
---|---|
|
Атрибут |
|
Атрибут |
|
Атрибут |
Следующий пример содержит ошибку, поскольку у атрибута не может быть дочерних элементов.
price/@exchange/total
Поиск нескольких атрибутов
Все атрибуты элемента можно получить с помощью метода @*
. Это может быть полезно для приложений, рассматривающих атрибуты как поля записи.
Примеры
Выражение | Ссылается на |
---|---|
|
Все атрибуты текущего узла контекста. |
|
Все атрибуты из пространства имен |
Обратите внимание, что шаблон поиска @*:title
не поддерживается.
См. также
Справочник
Понятия
Операции с наборами
Образец XML-файла с синтаксисом XPath (inventory.xml)