Функция sum
суммирует численные значения набора узлов и возвращает результат. Функция применяется следующим образом:
number sum(node-set)
Взгляните на следующий пример из главы 4, который находит средние массы планет в planets.xml
:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The average planetary mass is
XPath также поддерживает следующий набор логических функций:
• boolean()
. Приводит аргумент к логическому значению;
• false()
. Возвращает false (ложь);
• lang()
. Проверяет, совпадает ли язык, установленный в атрибуте xml:lang
, с языком, переданным в функцию;
• not()
. Инвертирует значение true\false аргумента;
• true()
. Возвращает true (истина).
Функция boolean
преобразует аргумент в логическое значение. Функция применяется следующим образом:
boolean boolean(object)
Ниже показано, как функция работает с различными типами XPath:
• number
. Если число равно нулю, результатом будет ложь; иначе результат — истина. NaN всегда возвращает ложь;
• string
. Если строка не пуста, результат — истина, иначе — ложь;
• boolean
. Значение не изменяется;
• nodeset
. Пустой набор узлов дает ложь, не пустой — истину;
• Фрагмент результирующего дерева в XSLT 1.0 всегда дает истину.
Функция false
возвращает ложь. Она применяется следующим образом:
boolean false()
В XPath не определены логические константы, поэтому для того чтобы присвоить переменной значение false, нужно прибегнуть к функции false
. (С переменными вы познакомитесь в главе 9.)
Функция lang
проверяет, совпадает ли язык контекстного узла (определенный в атрибуте xml:lang
) с переданным ей языком. Функция применяется следующим образом:
boolean lang(string)
Функции нужно передать строку, определяющую язык в спецификации XML, как, например, «en» для английского, «de» для немецкого и «jp» для японского.
В следующем примере я проверяю, написан ли исходный документ на английском. Сначала я устанавливаю атрибут xml:lang
в planets.xml
в значение, соответствующее английскому языку:
Mercury
.0553
58.65
1516
.983
43.4
.
.
.
Теперь я удостоверяюсь, что исходный документ на самом деле написан на английском, перед тем как применять к нему шаблоны:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
The Planets Table
|
|
|
|
Функция not
инвертирует логическое значение аргумента. При передаче аргумента с логическим значением true она возвращает false; при передаче аргумента со значением false функция возвращает true. Функция применяется следующим образом:
boolean not(boolean)
В следующем примере, который вы уже видели в главе 4, я хочу выбрать только те элементы, у которых есть оба атрибута — COLOR
и POPULATED
. Для этого я применяю предикат выбора « [@COLOR and (@POPULATED]
». Для того, чтобы убрать другие элементы (чтобы правила по умолчанию не включали их текст в результирующий документ), я использую предикат « [not(@COLOR) or not(@POPULATED)]
»:
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
.
.
.
|
|
|
|
Вот результат:
Colorful, Populated Planets
Colorful, Populated Planets
Name |
Mass |
Radius |
Day |
Earth |
1 (Earth = 1) |
2107 miles |
1 days |
Функция true
возвращает значение true. Она применяется следующим образом:
boolean true()
В XPath не определены логические константы, поэтому для того чтобы присвоить переменной значение true, нужно прибегнуть к функции true
. (С переменными вы познакомитесь в главе 9.)
Элемент : создание числовых форматов
Перед тем как закончить обсуждение функций XSLT и XPath, я хочу рассмотреть специальный элемент XSLT, , единственное предназначение которого заключается в работе только с одной функцией format-number
. В частности, при помощи этого элемента определяются символы и идентификаторы, которые будет использовать format-number
. У этого элемента несколько атрибутов:
• name
(необязательный). Имя десятичного формата. Принимает значение типа QName
. Если формат не задан, используется десятичный формат по умолчанию;
• decimal-separator
(необязательный). Определяет символ, разделяющий целую и дробную части числа. По умолчанию «.». Устанавливается в символ;
Читать дальше