Результатом неявного преобразования числа в строку является:
□ для конечных чисел — запись числа в десятичном формате;
□ для нулей (и положительного, и отрицательного) — " 0
";
□ для бесконечностей (отрицательной и положительной) — " -Infinity
" и " Infinity
" соответственно;
□ для нечисловых значений — " NaN
".
Примеры
-14 div 3
→ '-4.666666666666667'
0010.00050000
→ '10.0005'
-1 div (1 div 0)
→ '0'
1 - 1
→ '0'
1 div 0
→ 'Infinity'
-2 div 0
→ '-Infinity'
number('NaN')
→ 'NaN'
number('Infinity')
→ 'NaN'
Кроме неявного преобразования в строку, XSLT предоставляет широкие возможности для форматирования числовых значений с использованием функции format-number
.
Строки в XSLT практически не отличаются от строк в других языках программирования. Строка — это последовательность, состоящая из нуля или более символов определенного алфавита или набора символов (англ. character set). XSLT использует в качестве алфавита Unicode, что теоретически позволяет манипулировать любыми символами. Строки, которые не содержат символов, называются пустыми.
Строки в XSLT записываются в виде последовательностей символов, заключенных в кавычки — одинарные или двойные. Строки часто используются внутри атрибутов элементов, которые также могут быть заключены в двойные и одинарные кавычки и, потому, из соображений удобства, существует следующее негласное соглашение — значения атрибутов заключаются в двойные кавычки, а литералы (строковые значения) — в одинарные.
Пример
Результатом выполнения элемента
будет строковый узел со значением "text"
, в то время как элемент
создаст текстовый узел, значение которого будет равно текстовому значению элемента text
. В первом случае выражение "text"
являлось строкой, литералом, во втором — путем выборки.
Определенную сложность создает одновременное использование в литералах двойных и одинарных кавычек — некоторые процессоры будут воспринимать их как окончание значения атрибута. Такие строки проще всего будет задавать при помощи переменных, например:
'An author of "One Flew Over Cookoo's Nest"'
Следует особым образом отметить, что в XSLT, как XML-языке, символы могут быть заменены сущностями. Например, вместо символа " "
" (двойные кавычки) можно использовать сущность "
, а вместо символа " '
" (одинарные кавычки) — '
. Это позволяет использовать внутри атрибутов такие конструкции, как
'this is a string'
что эквивалентно
'this is a string'
На практике следует избегать таких приемов — они сильно запутывают текст программы. Сущности следует использовать только тогда, когда это действительно необходимо.
Строки можно сравнивать при помощи операторов " =
" (равно) или " !=
" (не равно). При сравнении строки проверяются на посимвольное совпадение. Различные процессоры могут по-разному реализовывать процедуру сравнения, например, рассматривать разные символы с одним начертанием как одинаковые, но в одном можно быть точно уверенными — в случае, если на одних и тех же местах будут стоять символы с одинаковыми Unicode-кодами, строки будут равны.
Пример
'not' = 'noх74;'
→ true
Не следует также забывать, что один символ в строке — это необязательно один байт. Более того, это необязательно некое фиксированное число байт, ведь модель символов Unicode позволяет использовать для записи символа коды переменной длины.
Строка может быть приведена к булевому и численному типу.
В булевом представлении пустой строке соответствует false
, непустой — true
. Содержимое непустой строки при этом никакой роли не играет. Булевое значение строки " false
" будет "истиной", равно, как и булевое значение строки " true
".
Примеры
'То be' or 'not to be'
→ true
'Full' and ''
→ false
'true' and 'false'
→ true
При приведении к численным значениям строки разбираются как числа в десятичном формате. Если строка не является представлением числа, ее численным значением будет NaN
. В свою очередь, результатом любых вычислений, в которых участвует NaN
, будет также NaN
.
Примеры
'2' * '2'
→ 4
'one' + 'two'
→ NaN
'2/3' + '5/6'
→ NaN
'2' div '3' + '5' div '6'
→ 1.5
При работе с численными значениями можно использовать следующие операторы:
Читать дальше