Алексей Валиков - Технология XSLT
- Название:Технология XSLT
- Автор:
- Жанр:
- Издательство:БХВ-Петербург
- Год:2002
- Город:Санкт-Петербург
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Алексей Валиков - Технология XSLT краткое содержание
Книга посвящена разработке приложений для преобразования XML-документов с использованием XSLT — расширяемого языка стилей для преобразований. Обсуждается применение языков XSLT и XPath в решении практических задач: выводу документов в формате HTML, использованию различных кодировок для интернационализации и, в частности, русификации приложений, вопросам эффективности существующих подходов для решения проблем преобразования. Для иллюстрации материала используется большое количество примеров.
Для начинающих и профессиональных программистов
Технология XSLT - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
□ Строковое значение преобразуется в число, которое оно представляет.
□ Множество узлов сначала преобразуется в строку, а затем, как строка в число. Фактически численным значением множества узлов является численное значение его первого узла.
□ Объекты других типов преобразуются в число в соответствии с собственными правилами. Например, результирующий фрагмент дерева так же как и множество узлов сначала преобразуется к строке, а затем в численный формат.
number($to_be or not($to_be))
→ 1
Значение этого выражения будет 1
, поскольку $to_be or not($to_be)
будет истинным вне зависимости от значения переменной to_be
.
number(false())
→ 0
number('00015.0001000')
→ 15.0001
number('.0001000')
→ 0.0001
number('1.')
→ 1
number('-.1')
→ -0.1
number('-5')
→ -5
Функция sum
number sum( node-set )
Функция sum
суммирует значения узлов из переданного ей множества. Строковые значения узлов сначала преобразуются в числа, а затем все полученные числа складываются.
1
3
5
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
1
4
9
16
25
В этом преобразовании мы заменяем каждый элемент item
на сумму значений предшествующих ему элементов плюс собственное значение. Предшествующие элементы выбираются путем выборки preceding-sibling::item
, текущий элемент — сокращенным путем " .
", затем эти два множества объединяются при помощи оператора |
, и, наконец, мы вычисляем сумму значений узлов, входящих в них функцией sum
.
Строковые значения суммируемых узлов преобразовываются в числовой формат так же, как они преобразовывались бы функцией number
. Например, если входящий документ будет иметь вид
1
3
five
7
9
то на выходе мы получим
1
4
NaN
NaN
NaN
потому что, начиная с третьего элемента, в суммировании будет участвовать значение 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'
Функция starts-with
boolean starts-with( string , string )
Функция starts-with
принимает на вход два строковых аргумента и возвращает true
, если первая строка начинается второй и false
в противном случае.
Интервал:
Закладка: