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

на главную - закладки

Жанры

Технология 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
опущен, процессор может сам выбирать между алфавитным и традиционным способами нумерации.

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

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

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

Третий. Том 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 4

Невеста на откуп

Белецкая Наталья
2. Невеста на откуп
Фантастика:
фэнтези
5.83
рейтинг книги
Невеста на откуп

Темный Лекарь

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

Сердце для стража

Каменистый Артем
5. Девятый
Фантастика:
фэнтези
боевая фантастика
9.20
рейтинг книги
Сердце для стража

Орден Багровой бури. Книга 5

Ермоленков Алексей
5. Орден Багровой бури
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Орден Багровой бури. Книга 5

Черный Маг Императора 5

Герда Александр
5. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 5

Релокант. По следам Ушедшего

Ascold Flow
3. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант. По следам Ушедшего

Отморозок 3

Поповский Андрей Владимирович
3. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 3

Фронтовик

Поселягин Владимир Геннадьевич
3. Красноармеец
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Фронтовик

Офицер империи

Земляной Андрей Борисович
2. Страж [Земляной]
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.50
рейтинг книги
Офицер империи

Барон меняет правила

Ренгач Евгений
2. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон меняет правила

Вернуть невесту. Ловушка для попаданки 2

Ардова Алиса
2. Вернуть невесту
Любовные романы:
любовно-фантастические романы
7.88
рейтинг книги
Вернуть невесту. Ловушка для попаданки 2

Девочка-лед

Джолос Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка-лед