Алексей Валиков - Технология 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в противном случае.
Интервал:
Закладка: