Технология XSLT
Шрифт:
Форматирование номеров
Возвращаясь немного назад, напомним, что результатом первого этапа выполнения
□ Список номеров будет пустым, если в области нумерации не оказалось нумеруемых узлов.
□ Список номеров будет состоять не более чем из одного числа при использовании методов
□ Список номеров будет состоять из нуля или более чисел (по одному на каждый уровень нумерации) при использовании метода
На этапе форматирования список номеров преобразуется в строку и вставляется результирующее дерево в виде текстового узла.
Преобразование номеров из списка в строку имеет совершенно иной характер, нежели чем приведение числа к строковому типу. При форматировании номера нужно получить не просто строковое представление числа, здесь требуется сгенерировать значащий текстовый индекс, который совершенно необязательно должен иметь цифровую запись.
Форматирование списка номеров производится в соответствии со значениями атрибутов
Основным атрибутом форматирования является атрибут
В примере к методу
Разберем строение атрибута
Рис. 8.12. Строение атрибута
Список номеров в том примере состоял из номера элемента
□ разделяющей последовательности "
□ числа
□ разделяющего символа "
□ числа
□ разделяющего символа "
Объединив все эти части, мы получим отформатированный номер "
Несложно заметить, что главную роль при преобразовании списка номеров в их строковое представление играют форматирующие токены. Каждый такой токен преобразовывает соответствующий ему номер в строку. В табл. 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 → 'βζο' |
При использовании алфавитной нумерации процессор может учитывать значение атрибута
Для форматирования номеров в последовательности
Представим теперь себе следующую ситуацию: нам нужно начать нумерацию с латинской буквы
Однако вместо требуемой последовательности мы получим последовательность строчных римских цифр: