
- •Лекция 4-08
- •5.3.9. Создание текстовых узлов вXslt
- •5.3.9.1. Элементxsl:text
- •5.3.9.2. Элементxsl:value-of
- •5.3.9.3. Встроенные правила шаблона
- •1. Поздравление
- •2. Напоминание
- •5.3.9.4. Обработка пробельных символов
- •5.3.10. Создание узлов документа, комментариев, инструкций по обработке и пространства имен вXslt
- •5.3.10.1. Элемент xsl:document
- •5.3.10.2. Элементxsl:result-document
- •5.3.10.3. Элементxsl:comment
- •5.3.10.4. Элемент xsl:processing-instruction
- •5.3.10.5. Элементxsl:namespace
- •5.3.11. Копирование узлов вXslt
- •5.3.11.1. Элементxsl:copy
- •5.3.11.2. Элементxsl:copy-of
- •5.3.11.3. Элементxsl:sequence
- •5.3.12. Условная и циклическая обработка вXslt
- •5.3.12.1. Элементxsl:if
- •5.3.12.2. Элементы xsl:choose, xsl:when и xsl:otherwise
- •5.3.12.3. Элементxsl:for-each
- •5.3.12.4. Сортировка вXslt
- •5.3.13. Сообщения процессораXslt
- •5.3.14. Псевдонимы пространства имен вXslt
- •5.3.15. Нумерация вXslt
- •3. Поздравление
- •1. Поздравление
- •1. Поздравление
- •01). Поздравление
- •0:00:00:00:01)Поздравление
- •5.3.16. Форматирование чисел в xslt
- •5.3.17. Использование ключей вXslt
- •5.3.18. Переменные, параметры и функции вXslt
- •5.3.18.1. Переменные в xslt
- •5.3.18.2. Вызов именованных правил шаблона
- •5.3.18.3. Параметры в xslt
- •5.3.18.4. Функции стилей в xslt
- •5.3.19. Дополнительные функции xslt
- •5.3.19.1. Функцияdocument()
- •5.3.19.2. Функцияcurrent()
- •5.3.19.3. Функцияgenerate-id()
- •5.3.19.4. Функция system-property()
- •5.3.19.5. Функцияunparsed-entity-uri()
- •5.3.20 Использование расширений вXslt
- •5.3.20.1. Средства расширенияXslt
- •5.3.20.2. Инициатива exslt
- •5.3.20.3. Средства расширения в процессореMsxml
- •5.3.20.4. Средства расширения в процессореSaxon
01). Поздравление
02). Напоминание.
Для нумерации большими и малыми русскими буквами необходимо задавать алфавитно-цифровой символ в виде ссылок на сущности: "&#х410;" (русская заглавная буква "A") и "&#х430;" (русская строчная буква "а"). Например, задание значения атрибута в виде"а) "приведет к выводу сообщений в следующей форме:
а) Поздравление
б) Напоминание.
Атрибут letter-valueустраняет неясности в последовательностях нумерации, использующих буквы. Во многих языках обычно используются две основные последовательности нумерации, использующие буквы. В одной из них нумерация производится буквенными значениями в алфавитном порядке, в другой же числовое значение каждому пункту назначается по-другому, так как это принято для данного языка. В английском языке это будет соответствовать последовательностям нумерации, задаваемым лексемами форматированияaиi. В некоторых языках первый член обеих последовательностей одинаков, а потому одной лексемы форматирования будет недостаточно. Значение"alphabetic"указывает алфавитную последовательность, значение"traditional"– альтернативную. Если атрибутletter-valueне указан, порядок разрешения любых неоднозначностей определяется реализацией. Этим атрибутом надо пользоваться осторожно, поскольку в разных процессорах он реализуется по-разному.
При использовании цифровых форматов нумерации (иными словами, строк вида 1,01,001и так далее) цифры в номере можно разделить на группы, получив, например, такие номера как "2.00.00" из20000или "0-0-0-2" из2. Для этой цели вxsl:numberиспользуется пара атрибутовgrouping-separatorиgrouping-size.
Атрибут grouping-separatorзадает символ, который следует использовать для разбивки номера на группы цифр, в то время какgrouping-sizeуказывает размер группы. Эти атрибуты всегда должны быть вместе: если хотя бы один из них опущен, второй просто игнорируется.
Если задать элемент xsl:numberв следующем виде:
<xsl:number count="header" format="000000001)"
grouping-separator=":" grouping-size="2"/>,
то список тем примет следующий вид:
0:00:00:00:01)Поздравление
0:00:00:00:02)Напоминание.
Атрибут ordinalзадает строку, которая будет использоваться как окончания в порядковых числительных, например, для английского языка1st,2nd,3rd,4th,…. Допустимые окончания порядковых задаются в значении атрибута в виде списка, элементы которого отделяются друг от друга пробелами, причем каждый элемент начинается с символа "~", например, "~ый ~ой ~ий ~ая~ое ~ые". Реализация процессора XSLT может обеспечивать правильную подстановку окончаний порядковых числительных с учетом значений атрибутовlangиformat. Если процессор такой возможности не обеспечивает, вместо порядковых выводятся количественные числительные.
5.3.16. Форматирование чисел в xslt
XSLTпредоставляет мощные возможности для форматирования строкового представления чисел при помощи функцииformat-numberи элементаxsl:decimal-format.
Запись функции имеет следующий вид:
строкаformat-number(число,строка-формата,имя-decimal-format)
Первым параметром функции является число, которое необходимо преобразовать в строку, применив при этом форматирование. Вторым параметром являетсястрока-формата– образец, в соответствии с которым будет форматироваться число. Третий, необязательный параметр указывает имя элементаxsl:decimal-format, который следует применять.
Образец форматирования в XSLT определяется точно так же, как в классе DecimalFormatязыкаJava.
Прежде всего, образец форматирования может состоять из двух частей: первая часть определяет форматирование положительного числа, вторая часть – отрицательного.
В случае если вторая часть образца форматирования опущена, отрицательные числа форматируются точно так же, как и положительные, но им предшествует префикс отрицательного числа (по умолчанию, символ "-").
Используемые в строке формата символы делятся на форматирующие и неформатирующие.
К форматирующим символам относятся следующие символы:
символ обязательной позиции цифры (по умолчанию "0");
символ необязательной позиции цифры (по умолчанию "#");
символ-разделитель образцов форматирования для положительного и отрицательного числа (по умолчанию ";");
символ-разделитель целой и дробной части (по умолчанию ".");
символ процента (по умолчанию "%").
Форматирующие символы при формировании выходной строки рассматриваются как шаблоны преобразования строки.
Все остальные символы считаются неформатирующими и выводятся в возвращаемой функцией строке без изменения.
Каждая из частей образца форматирования состоит из префикса, целой части, необязательной дробной части и суффикса.
Префикс или суффикс образца форматирования могут содержать символ процента. Если суффикс содержит символ процента, число должно быть умножено на 100 и выведено со знаком процента. Наличие символа процента в префиксе на форматирование не влияет.
Префикс задает строку, которая будет предшествовать числу, это может быть последовательность любых неформатирующих символов плюс символ процента. Аналогично, суффикс будет следовать за числом, и он тоже не может содержать форматирующих символов (за исключением символа процента).
Целая часть числа может начинаться несколькими символами, показывающими позиции, в которых цифры необязательны (по умолчанию "#"), и состоит из символов, показывающих позиции обязательных цифр (по умолчанию"0"), а также может содержать символы, показывающие позицию символа-разделителя групп цифр (по умолчанию ",").
Некоторые процессоры позволяют указывать несколько символов-разделителей. Однако даже в этом случае они учитывают только последний из этих символов.
Дробная часть числа начинается символом-разделителем целой и дробной части (по умолчанию "."), продолжается последовательностью символов обязательных позиций цифр и заканчивается последовательностью символов необязательных позиций.
Примеры вызова функции format-number:
format-number(-1234.567,'#.00;negative #.00')
'negative 1234.57'.
format-number(0.45,'0.##%') '45.00%'.
format-number(1234.56,'000,00') '0,12,35'.
format-number (1234.567, '#.00'') '1234.57'.
format-number(1234.567,'#.0000') '1234.5670'.
В XSLTможно изменять специальные символы, влияющие на форматирование строки. Именованный набор таких символов и некоторых других указаний называетсядесятичным форматоми определяется элементомxsl:decimal-format. Этот элемент используется только на верхнем уровне (вне правил шаблона).
Этот элемент имеет следующий синтаксис:
<xsl:decimal-format
name="имя"
decimal-separator="символ"
grouping-separator="символ"
infinity="строка"
minus-sign="символ"
NaN="строка"
percent="символ"
per-mille="символ"
zero-digit="символ"
digit="символ"
pattern-separator="символ"
/>
Атрибут nameзадает расширенное имя десятичного формата. Это имя может указываться в качестве третьего параметра при вызове функцииformat-number. Если имя не указано, это означает, что элементxsl:decimal-formatопределяет десятичный формат по умолчанию.
Остальные атрибуты контролируют интерпретацию форматирующего образца и вывод строкового представления числа следующим образом:
decimal-separator– задает символ, разделяющий целую и дробную части числа. Значением этого атрибута по умолчанию является символ ".". Атрибут рассматривается как специальный символ образца форматирования. Кроме того, он будет использован как разделяющий символ при выводе;
grouping-separator– задает символ, группирующий цифры в целой части записи числа. Такие символы используются, например, для группировки тысяч("1, 234"). Значением по умолчанию является символ ",". Атрибут рассматривается как специальный символ образца форматирования. Помимо этого, он будет использован как разделяющий символ групп цифр при выводе числа;
percent– задает символ процента. Значением по умолчанию является символ "%". Этот символ будет распознаваться в образце форматирования, и использоваться при выводе;
per-mille– задает символ промилле. Значением по умолчанию является символ "‰". Символ промилле распознается в образце форматирования и используется в строковом представлении числа;
zero-digit– задает символ нуля. Значением по умолчанию является символ "0". В качестве цифр при отображении числа будут использоваться символ нуля и 9 символов, следующих за ним. Символ нуля распознается в образце форматирования и используется при выводе строкового представления числа;
digit– определяет символ, который используется в образце форматирования для определения позиции необязательного символа. Значением по умолчанию является символ "#". Этот символ распознается как форматирующий символ необязательной цифры. Он не включается в строковое представление числа;
pattern-separator– определяет символ, который используется в образце форматирования для разделения положительного и отрицательного форматов числа. Он не включается в строковое представление числа. Значением этого атрибута по умолчанию является символ ";";
infinity– задает строку, которая будет представлять бесконечность. Значением по умолчанию является строка "infinity";
NaN– задает строку, которая будет представлять не-числа. Значением по умолчанию является строка "NaN";
minus-sign– задает символ, который будет использоваться для обозначения отрицательных чисел. Значением по умолчанию является символ "-".
Примеры использования элемента decimal-format:
Определение десятичного формата:
<xsl:decimal-format name="euro"
decimal-separator="," grouping-separator="."/>
меняет символы разделителей дробной и целой части, а также групп цифр, принятые в США, на европейские, например, при вызове функции в следующем элементе:
<xsl:value-of
select="format-number(26825.8, '#.###,00', 'euro')"/>,
Вызов этой функции возвратит значение 26.825,80.