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

на главную

Жанры

Технология XSLT

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

Шрифт:

<xsl:if test="$x != $x">

 <xsl:text>This is not a number (NaN).</xsl:text>

</xsl:if>

Арифметические операции в XSLT никогда не вызывают ошибки. Деление на нуль, не разрешенное во многих языках программирования, не является для XSLT исключительной ситуацией. Частным такого деления будет положительная или отрицательная бесконечность. Но все же, следует осторожно использовать "опасные" выражения, например, в сравнениях. Несколько необычное поведение операторов сравнения в операциях с NaN может создать в программе курьезные, но трудно обнаруживаемые ошибки —

можно легко забыть о том, что некоторые значения могут быть не равны сами себе.

Числа могут быть неявно преобразованы в булевый тип или в строку. При преобразовании числа в булевый тип, нуль (как положительный, так и отрицательный) и

NaN
преобразуются в
false
, все остальные значения (включая бесконечности) — в
true
.

Примеры

– 1 div (1 div 0) > false 1 div 0
true

number('NaN') > false number('true')
false

Результатом неявного преобразования числа в строку является:

□ для конечных чисел — запись числа в десятичном формате;

□ для нулей (и положительного, и отрицательного) — "

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
.

Строковый тип (string)

Строки в XSLT практически не отличаются от строк в других языках программирования. Строка — это последовательность, состоящая из нуля или более символов определенного алфавита или набора символов (англ. character set). XSLT использует в качестве алфавита Unicode, что теоретически позволяет манипулировать любыми символами. Строки, которые не содержат символов, называются пустыми.

Строки в XSLT записываются в виде последовательностей символов, заключенных в кавычки — одинарные или двойные. Строки часто используются внутри атрибутов элементов, которые также могут быть заключены в двойные и одинарные кавычки и, потому, из соображений удобства, существует следующее негласное соглашение — значения атрибутов заключаются в двойные кавычки, а литералы (строковые значения) — в одинарные.

Пример

Результатом выполнения элемента

<xsl:value-of select="'text'"/>

будет строковый узел со значением

"text"
, в то время как элемент

<xsl:value-of select="text"/>

создаст

текстовый узел, значение которого будет равно текстовому значению элемента
text
. В первом случае выражение
"text"
являлось строкой, литералом, во втором — путем выборки.

Определенную сложность создает одновременное использование в литералах двойных и одинарных кавычек — некоторые процессоры будут воспринимать их как окончание значения атрибута. Такие строки проще всего будет задавать при помощи переменных, например:

<xsl:variable name="s">

 <xsl:text>'An author of "One Flew Over Cookoo's Nest"'</xsl:text>

</xsl:variable>

<xsl:value-of select="$s"/>

Следует особым образом отметить, что в XSLT, как XML-языке, символы могут быть заменены сущностями. Например, вместо символа "

"
" (двойные кавычки) можно использовать сущность
&quot;
, а вместо символа "
'
" (одинарные кавычки) —
&apos;
. Это позволяет использовать внутри атрибутов такие конструкции, как

'this is a string&apos;

что эквивалентно

'this is a string'

На практике следует избегать таких приемов — они сильно запутывают текст программы. Сущности следует использовать только тогда, когда это действительно необходимо.

Строки можно сравнивать при помощи операторов "

=
" (равно) или "
!=
" (не равно). При сравнении строки проверяются на посимвольное совпадение. Различные процессоры могут по-разному реализовывать процедуру сравнения, например, рассматривать разные символы с одним начертанием как одинаковые, но в одном можно быть точно уверенными — в случае, если на одних и тех же местах будут стоять символы с одинаковыми Unicode-кодами, строки будут равны.

Пример

'not' = 'n&#111;&#х74;&apos;
true

Не следует также забывать, что один символ в строке — это необязательно один байт. Более того, это необязательно некое фиксированное число байт, ведь модель символов Unicode позволяет использовать для записи символа коды переменной длины.

Строка может быть приведена к булевому и численному типу.

В булевом представлении пустой строке соответствует

false
, непустой —
true
. Содержимое непустой строки при этом никакой роли не играет. Булевое значение строки "
false
" будет "истиной", равно, как и булевое значение строки "
true
".

Примеры

'То be' or 'not to be'
true

'Full' and ''
false

'true' and 'false'
true

При приведении к численным значениям строки разбираются как числа в десятичном формате. Если строка не является представлением числа, ее численным значением будет

NaN
. В свою очередь, результатом любых вычислений, в которых участвует
NaN
, будет также
NaN
.

Поделиться:
Популярные книги

Лорд Системы 12

Токсик Саша
12. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 12

Младший научный сотрудник 2

Тамбовский Сергей
2. МНС
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Младший научный сотрудник 2

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Цеховик. Книга 2. Движение к цели

Ромов Дмитрий
2. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Цеховик. Книга 2. Движение к цели

Неестественный отбор.Трилогия

Грант Эдгар
Неестественный отбор
Детективы:
триллеры
6.40
рейтинг книги
Неестественный отбор.Трилогия

Попаданка в семье драконов

Свадьбина Любовь
Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.37
рейтинг книги
Попаданка в семье драконов

Звезда сомнительного счастья

Шах Ольга
Фантастика:
фэнтези
6.00
рейтинг книги
Звезда сомнительного счастья

Беглец

Кораблев Родион
15. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Беглец

Я – Орк

Лисицин Евгений
1. Я — Орк
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я – Орк

Смерть может танцевать 2

Вальтер Макс
2. Безликий
Фантастика:
героическая фантастика
альтернативная история
6.14
рейтинг книги
Смерть может танцевать 2

Идеальный мир для Лекаря 18

Сапфир Олег
18. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 18

Жандарм

Семин Никита
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Жандарм

Путь Шедара

Кораблев Родион
4. Другая сторона
Фантастика:
боевая фантастика
6.83
рейтинг книги
Путь Шедара

Гром над Империей. Часть 1

Машуков Тимур
5. Гром над миром
Фантастика:
фэнтези
5.20
рейтинг книги
Гром над Империей. Часть 1