Чтение онлайн

ЖАНРЫ

Технология XSLT

Валиков Алексей Н.

Шрифт:

Строковые значения суммируемых узлов преобразовываются в числовой формат так же, как они преобразовывались бы функцией

number
. Например, если входящий документ будет иметь вид

<list>

 <item>1</item>

 <item>3</item>

 <item>five</item>

 <item>7</item>

 <item>9</item>

</list>

то на выходе мы получим

<list>

 <sum>1</sum>

 <sum>4</sum>

 <sum>NaN</sum>

 <sum>NaN</sum>

 <sum>NaN</sum>

</list>

потому

что, начиная с третьего элемента, в суммировании будет участвовать значение
number('five')
, то есть не-число (
NaN
).

Функции floor и ceiling

number floor(number)

number ceiling(number)

Функции

floor
и
ceiling
(англ. пол и потолок соответственно) осуществляют округление численного аргумента до ближайшего не большего и ближайшего не меньшего целого соответственно.

Примеры

floor(2.3)
2

ceiling(2.3)
3

floor(-2.3)
– 3

ceiling(-2.3)
– 2

floor(-1 div 0)
– Infinity

ceiling(-1 div 0)
– Infinity

floor('zero')
NaN

ceiling(-1 div (-1 div 0))
0

Функция round

number round(number)

Функция

round
округляет число до ближайшего целого значения. У этой функции есть несколько нюансов, которые мы сейчас разберем.

□ Если дробная часть числа равна 0.5, то функция вернет ближайшее большее целое.

□ Если аргумент является не-числом (NaN), то результат также будет NaN.

□ Если аргумент является положительной или отрицательной бесконечностью, то результатом будет тоже положительная или отрицательная бесконечность, то есть аргумент не изменится.

□ Если аргумент является положительным или отрицательным нулем, результатом будет также положительный или отрицательный нуль, то есть аргумент не изменится.

□ Если аргумент меньше нуля, но больше или равен — 0.5, результатом будет отрицательный нуль.

Примеры

round(2.5)
3

round(2.49)
2

round(-1.7)
– 2

1 div round(0.5)
Infinity

1 div round(-0.5)
– Infinity

round(1 div 0)
Infinity

round('one')
NaN

Строковые

функции

Функция string

string string(object?)

Подобно функциям

boolean
и
number
, функция
string
преобразует свой аргумент к строковому типу явным образом. Если аргумент опущен, функции передается множество узлов, состоящее из единственного контекстного узла.

Напомним вкратце правила приведения других типов к строке.

□ Булевые значения преобразуются в строку следующим образом:

 • "истина" (

true
) преобразуется в строку "
true
";

 • "ложь" (

false
) преобразуется в строку "
false
".

□ Числа преобразуются к строковому виду следующим образом:

 • не-число (

NaN
) преобразуется в строку "
NaN
";

 • положительный нуль преобразуется в строку "

0
";

 • отрицательный нуль преобразуется в строку "

0
";

 • положительная бесконечность преобразуется в строку "

Infinity
";

 • отрицательная бесконечность преобразуется в строку "

– Infinity
";

 • положительные целые преобразуются в свое десятичное представление без ведущих нулей и без точки ("

.
"), отделяющей дробную часть от целой;

 • отрицательные целые преобразуются так же, как и положительные, но с начальным знаком "минус" ("

");

 • остальные числа преобразуются в десятичное представление с использованием точки ("

.
"), отделяющей целую часть от дробной части; целая часть не содержит ведущих нулей (кроме случая с числами в интервале (-1;1)), дробная часть содержит столько цифр, сколько требуется для точного представления числа.

□ Множество узлов преобразуется в строковое значение своего первого в порядке просмотра документа узла. Если множество пусто, функция возвращает пустую строку.

□ Объекты других типов преобразуются в строку в соответствии с собственными правилами. Например, результирующий фрагмент дерева преобразуется в конкатенацию всех своих строковых узлов.

Примеры

string(boolean(0))
false

string(number('zero'))
NaN

string(number('.50000'))
0.5

string(number(00500.))
500

Для строкового форматирования чисел рекомендуется использовать функцию XSLT

format-number
совместно с элементом
xsl:decimal-format
.

Функция concat

string concat(string, string, string*)

Функция

concat
принимает на вход две или более строки и возвращает конкатенацию (строковое сложение) своих аргументов.

Пример:

concat('not','with','standing',' problem')
'notwithstanding problem'

Поделиться с друзьями: