XPATH
Оси
Оси — это база языка XPath. Для некоторых осей существуют сокращённые обозначения.
- child:: — содержит множество элементов-потомков (элементов, расположенных на один уровень ниже). Это название сокращается полностью, то есть его можно вовсе опускать.
- descendant:: — содержит полное множество элементов-потомков (то есть, как ближайших элементов-потомков, так и всех их элементов-потомков).
- descendant-or-self:: — содержит полное множество элементов-потомков и текущий элемент. Выражение /descendant-or-self::node()/ можно сокращать до . С помощью этой оси, например, можно вторым шагом организовать отбор элементов с любого узла, а не только с корневого: достаточно первым шагом взять всех потомков корневого. Например, путь span отберёт все узлы span документа, независимо от их положения в иерархии, взглянув как на имя корневого, так и на имена всех его дочерних элементов, на всю глубину их вложенности.
- ancestor:: — содержит множество элементов-предков.
- ancestor-or-self:: — содержит множество элементов-предков и текущий элемент.
- parent:: — содержит элемент-предок на один уровень назад. Это обращение можно заменить на ..
- self:: — содержит текущий элемент. Это обращение можно заменить на .
- following:: — содержит множество элементов, расположенных ниже текущего элемента по дереву (на всех уровнях и слоях), исключая собственных потомков.
- following-sibling:: — содержит множество братских элементов того же уровня, следующих за текущим слоем.
- preceding:: — содержит множество элементов, расположенных выше текущего элемента по дереву (на всех уровнях и слоях), исключая множество собственных предков.
- preceding-sibling:: — содержит множество братских элементов того же уровня, предшествующих текущему слою.
- attribute:: — содержит множество атрибутов текущего элемента. Это обращение можно заменить на символ @
- space:: — содержит множество элементов, относящихся к тому или иному пространству имён (то есть присутствует атрибут xmlns).
Функции над множествами узлов
Функция | Описание | |
node-set | node() | Возвращает сам узел. Вместо этой функции часто используют заменитель *, но, в отличие от звёздочки, функция node() возвращает и текстовые узлы |
string | text() Возвращает узел, если он текстовый | |
node-set | current() | Возвращает множество из одного элемента, который является текущим. Если мы делаем обработку множества с предикатами, то единственным способом дотянуться из этого предиката до текущего элемента будет данная функция |
number | position() | Возвращает позицию элемента в множестве элементов оси. Корректно работает только в цикле <xsl:for-each/> |
number | last() | Возвращает номер последнего элемента в множестве элементов оси. Корректно работает только в цикле <xsl:for-each/> |
number | count(node-set) | Возвращает количество элементов в node-set. |
string | name(node-set?) | Возвращает полное имя первого тега в множестве |
string | namespace-url(node-set?) | Возвращает ссылку на URL, определяющий пространство имён |
string | local-name(node-set?) | Возвращает имя первого тега в множестве, без пространства имён |
node-set | id(object) | Находит элемент с уникальным идентификатором |
Строковые функции
Функция | Описание | |
string | string(object?) | Возвращает текстовое содержимое элемента. По сути, возвращает объединённое множество текстовых элементов на один уровень ниже |
string | concat(string, string, string*) | Соединяет строки, указанные в аргументах |
number | string-length(string?) | Возвращает длину строки |
boolean | contains(string, string) | Возвращает true, если первая строка содержит вторую, иначе — false |
string | substring(string, number, number?) | Возвращает строку, вырезанную из строки, начиная с указанного номера, и, если указан второй номер, — количество символов |
string | substring-before(string, string) | Если найдена вторая строка в первой, возвращает строку до первого вхождения второй строки |
string | substring-after(string, string) | Если найдена вторая строка в первой, возвращает строку после первого вхождения второй строки |
boolean | starts-with(string, string) | Возвращает true, если вторая строка входит в начало первой, иначе — false |
boolean | ends-with(string, string) | Возвращает true, если вторая строка входит в конец первой, иначе — false |
string | normalize-space(string?) | Убирает лишние и повторные пробелы, а также управляющие символы, заменяя их пробелами |
string | translate(string, string, string) | Заменяет символы первой строки, которые встречаются во второй строке, на соответствующие позиции символам из второй строки символы из третьей строки. Например, translate("bar", "abc", "ABC") вернёт BAr. |
Логические функции и операторы
Символ, оператор | Значение |
---|---|
or | логическое «или» |
and | логическое «и» |
= | логическое «равно» |
< (<) | логическое «меньше» |
> (>) | логическое «больше» |
<= (<=) | логическое «меньше либо равно» |
>= (>=) | логическое «больше либо равно» |
Функция | Описание | |
boolean | boolean(object) | Приводит объект к логическому типу |
boolean | true() | Возвращает истину |
boolean | false() | Возвращает ложь |
boolean | not(boolean) |
Числовые функции и операторы
Символ, оператор | Значение |
---|---|
+ | сложение |
− | вычитание |
* | умножение |
div | обычное деление (не нацело!) |
mod | остаток от деления |
Функция | Описание | |
number | number(object?) | Переводит объект в число |
number | sum(node-set) | Вернёт сумму множества. Каждый тег множества будет преобразован в строку и из него получено число |
number | floor(number) | Возвращает наибольшее целое число, не большее, чем аргумент (округление к меньшему) |
number | ceiling(number) | Возвращает наименьшее целое число, не меньшее, чем аргумент (округление к большему) |
number | round(number) | Округляет число по математическим правилам |
Системные функции
Функция | Описание | |
node-set | document(object, node-set?) | Возвращает документ, указанный в параметре object |
string | format-number(number, string, string?) | Форматирует число согласно образцу, указанному во втором параметре. Третий параметр указывает именованный формат числа, который должен быть учтён |
string | generate-id(node-set?) | Возвращает строку, являющуюся уникальным идентификатором |
node-set | key(string, object) | Возвращает множество с указанным ключом (аналогично функции id для идентификаторов) |
string | unparsed-entity-uri(string) | Возвращает непроанализированный URI. Если такового нет, возвращает пустую строку |
boolean | element-available(string) | Проверяет, доступен ли элемент или множество, указанное в параметре. Параметр рассматривается как XPath |
boolean | function-available(string) | Проверяет, доступна ли функция, указанная в параметре. Параметр рассматривается как XPath |
object | system-property(string) | Параметры, возвращающие системные переменные. Могут быть: |
xsl: | version — возвращает версию XSLT процессора. | |
xsl: | vendor — возвращает производителя XSLT процессора. | |
xsl: | vendor-url — возвращает URL, идентифицирующий производителя. Если используется неизвестный параметр, функция возвращает пустую строку | |
boolean | lang(string) | Возвращает true, если у текущего тега имеется атрибут xml: lang, либо родитель тега имеет атрибут xml: lang и в нём указан совпадающий строке символ |
- * Обозначает любое имя или набор символов по указанной оси, например: * — любой дочерний узел; @* — любой атрибут
- $name Обращение к переменной. name — имя переменной или параметра
- [] Дополнительные условия выборки (или предикат шага адресации). Должен содержать логическое значение. Если содержит числовое, считается что это порядковый номер узла, что эквивалентно приписыванию перед этим числом выражения position()=
- {} Если применяется внутри тега другого языка (например HTML), то XSLT-процессор рассматривает содержимое фигурных скобок как XPath
- / Определяет уровень дерева, т. е. разделяет шаги адресации
- | Объединяет результат. Т. е., в рамках одного пути можно написать несколько путей разбора через знак |, и в результат такого выражения войдёт всё, что будет найдено любым из этих путей