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	логическое «и»
=	логическое «равно»
< (&lt;)	логическое «меньше»
> (&gt;)	логическое «больше»
<= (&lt;=)	логическое «меньше либо равно»
>= (&gt;=)	логическое «больше либо равно»
Функция	Описание
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

/ Определяет уровень дерева, т. е. разделяет шаги адресации

| Объединяет результат. Т. е., в рамках одного пути можно написать несколько путей разбора через знак |, и в результат такого выражения войдёт всё, что будет найдено любым из этих путей