Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
languages:xpath [2018/09/07 21:30] – создано mirocowlanguages:xpath [2018/09/07 22:26] (текущий) – [Системные функции] mirocow
Строка 1: Строка 1:
 ====== XPATH ====== ====== 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.|
 +
 +===== Логические функции и операторы =====
 +
 +^Символ, оператор| Значение|
 +|<code>or</code>| логическое «или»|
 +|<code>and</code>| логическое «и»|
 +|<code>=</code>| логическое «равно»|
 +|<code>< (&lt;)</code>| логическое «меньше»|
 +|<code>> (&gt;)</code>| логическое «больше»|
 +|<code><= (&lt;=)</code>| логическое «меньше либо равно»|
 +|<code>>= (&gt;=)</code>| логическое «больше либо равно»|
 +
 +
 +^|Функция| Описание^
 +|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
 +  * / Определяет уровень дерева, т. е. разделяет шаги адресации
 +  * | Объединяет результат. Т. е., в рамках одного пути можно написать несколько путей разбора через знак |, и в результат такого выражения войдёт всё, что будет найдено любым из этих путей