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

на главную

Жанры

Технология XSLT

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

Шрифт:

Форматирование номеров

Возвращаясь немного назад, напомним, что результатом первого этапа выполнения

xsl:number
является список номеров, который может быть пустым или содержать одно или несколько чисел. Несложно увидеть, что количество номеров в этом списке будет зависеть от следующих условий.

□ Список номеров будет пустым, если в области нумерации не оказалось нумеруемых узлов.

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

single
и
any
.

□ Список номеров будет состоять из нуля или более чисел (по одному на каждый уровень нумерации) при использовании метода

multiple
.

На этапе форматирования список номеров преобразуется в строку и вставляется результирующее дерево в виде текстового узла.

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

Форматирование списка номеров производится в соответствии со значениями атрибутов

format
,
lang
,
letter-value
,
grouping-separator
и
grouping-size
, назначение и использование которых мы и будем разбирать в этом разделе.

Основным атрибутом форматирования является атрибут

format
, который содержит последовательность форматирующих токенов. Каждый форматирующий токен состоит из букв и цифр; он определяет процедуру форматирования для каждого числа из списка форматируемых номеров. В значении атрибута
format
форматирующие токены отделяются друг от друга сочетаниями символов, которые не являются буквами и цифрами. Такие сочетания называются разделяющими последовательностями. При форматировании они остаются в строковом выражении номера без изменений.

Пример

В примере к методу

multiple
мы использовали следующий элемент
xsl:number
:

<xsl:number

 format=" 1.1."

 level="multiple"

 count="doc|chapter|para"

 from="doc"/>

Разберем строение атрибута

format
этого элемента (на рис. 8.12 пробелы обозначены символами "
"):

Рис. 8.12. Строение атрибута

format
элемента
xsl:number

Список номеров в том примере состоял из номера элемента

chapter
(числа 2) и номера элемента
para
(тоже 2). Номер, генерируемый элементом
xsl:number
, будет состоять из:

□ разделяющей последовательности "

□□□□□
", которая будет скопирована, как есть;

□ числа

2
, которое получается в результате форматирования номера 2 форматирующим токеном "
1
";

□ разделяющего символа "

.
";

□ числа

2
, которое получается в результате форматирования номера 2 вторым форматирующим токеном "
1
";

□ разделяющего символа "

.
".

Объединив все эти части, мы получим отформатированный номер "

□□□□□2.2
".

Несложно заметить, что главную роль при преобразовании списка номеров в их строковое представление играют форматирующие токены. Каждый такой токен преобразовывает соответствующий ему номер в строку. В табл. 8.3 мы приведем описания этих преобразований.

Таблица 8.3. Форматирующие токены

Токен Описание Примеры
Токен Преобразование
1
Форматирует номер в виде строкового представления десятичного числа
1
1
'1'
1
2
'2'
1
10
'10'
1
999
'999'
1
1000
'1000'
0...01
Форматирует номер в виде строкового представления десятичного числа; если получившая строка короче токена, она дополняется предшествующими нулями
0001
1
'0001'
001
2
'002'
001
10
'010'
01
999
'999'
00001
1000
'01000'
A
Форматирует номер в виде последовательности заглавных букв латинского алфавита
A
1
'A'
A
2
'B'
A
10
'J'
A
27
'AA'
A
999
'ALK'
A
1000
'ALL'
a
Форматирует номер в виде последовательности строчных букв латинского алфавита
a
1
'a'
a
2
'b'
a
10
'j'
a
27
'aa'
a
999
'alk'
a
1000
'all'
I
Форматирует
номер заглавными римскими цифрами
I
1
'I'
I
2
'II'
I
10
'X'
I
27
'XXVII'
I
999
'IM'
I
1000
'M'
i
Форматирует номер строчными римскими цифрами
i
1
'i'
i
2
'ii'
i
10
'x'
i
27
'xxvii'
i
999
'im'
i
1000
'm'
Другой Форматирует номер
k
как
k
– й член последовательности, начинающейся этим токеном. Если нумерация таким токеном не поддерживается, вместо него используется токен
1
.
Не поддерживающийся токен
1
'1'
b
10
'k'
Б
2
'В'
Б
27
'Ы'
á
999
'ανψ'
å
1000
'βζο'

При использовании алфавитной нумерации процессор может учитывать значение атрибута

lang
элемента
xsl:number
для того, чтобы использовать буквы алфавита соответствующего языка. Однако на практике возможность эта поддерживается очень слабо: большинство процессоров поддерживают алфавитную нумерацию только с использованием латиницы. Поэтому для того, чтобы использовать при алфавитной нумерации кириллицу, вместо атрибута
lang
следует использовать форматирующие токены "
&#x410;
" (русская заглавная буква "
А
") и "
&#х430;
" (русская строчная буква "
а
").

Пример

Для форматирования номеров в последовательности

1.1.a
,
1.1.б
,
1.1.в
, …,
1.2.а
и так далее можно использовать объявление вида:

<xsl:number

 format="1.&#х430;"

 level="multiple"

 count="chapter|section"

 from="doc"/>

Представим теперь себе следующую ситуацию: нам нужно начать нумерацию с латинской буквы

i
для того, чтобы получить последовательность номеров вида
i
,
j
,
k
,
l
,
m
и так далее. Первое, что приходит в голову — это запись вида

<xsl:number format="i" ... />

Однако вместо требуемой последовательности мы получим последовательность строчных римских цифр:

i
,
ii
,
iii
и так далее. Иными словами, некоторые форматирующие токены определяют нумерующую последовательность двусмысленно: одним вариантом является алфавитная последовательность, начинающаяся этим токеном, другим — некая традиционная для данного языка (например, последовательность римских цифр для английского).Для того чтобы различать эти последовательности в двусмысленных ситуациях, в
xsl:number
существует атрибут
letter-value
. Если его значением является
"alphabetic"
, нумерующая последовательность является алфавитной, значение
"traditional"
указывает на то, что следует использовать традиционный для данного языка способ. Если атрибут
letter-value
опущен, процессор может сам выбирать между алфавитным и традиционным способами нумерации.

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

Наследник и новый Новосиб

Тарс Элиан
7. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник и новый Новосиб

Сумеречный стрелок 8

Карелин Сергей Витальевич
8. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Сумеречный стрелок 8

Идеальный мир для Социопата 2

Сапфир Олег
2. Социопат
Фантастика:
боевая фантастика
рпг
6.11
рейтинг книги
Идеальный мир для Социопата 2

Краш-тест для майора

Рам Янка
3. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
эро литература
6.25
рейтинг книги
Краш-тест для майора

Идеальный мир для Социопата 6

Сапфир Олег
6. Социопат
Фантастика:
боевая фантастика
рпг
6.38
рейтинг книги
Идеальный мир для Социопата 6

Королевская Академия Магии. Неестественный Отбор

Самсонова Наталья
Любовные романы:
любовно-фантастические романы
8.22
рейтинг книги
Королевская Академия Магии. Неестественный Отбор

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Кодекс Охотника. Книга V

Винокуров Юрий
5. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.50
рейтинг книги
Кодекс Охотника. Книга V

Его наследник

Безрукова Елена
1. Наследники Сильных
Любовные романы:
современные любовные романы
эро литература
5.87
рейтинг книги
Его наследник

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Бальмануг. (Не) Любовница 2

Лашина Полина
4. Мир Десяти
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Бальмануг. (Не) Любовница 2

Корпулентные достоинства, или Знатный переполох. Дилогия

Цвик Катерина Александровна
Фантастика:
юмористическая фантастика
7.53
рейтинг книги
Корпулентные достоинства, или Знатный переполох. Дилогия

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

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

Возмездие

Злобин Михаил
4. О чем молчат могилы
Фантастика:
фэнтези
7.47
рейтинг книги
Возмездие