Элемент <xsl:number>
Вставляет форматированное число в результирующее дерево.
<xsl:number
level = "single" | "multiple" | "any"
count = Pattern
from = Pattern
value = number-expression
format = { string }
lang = { nmtoken }
letter-value = { "alphabetic" | "traditional" }
grouping-separator = { char }
grouping-size = { number } />
Атрибуты
level
Указывает, какие уровни исходного дерева следует учитывать. Возможные значения — "single", "multiple" и "any".Значение по умолчанию — "single".count
Шаблон Шаблоны, указывающий узлы, которые следует учитывать на этих уровнях.Если атрибут count не задан, то по умолчанию используется шаблон, которому соответствует любой узел того же типа, что и текущий узел, и если у текущего узла есть расширенное имя, то с тем же расширенным именем, что у текущего узла.from
Шаблон Шаблоны, указывающий, с какой точки начинается отсчет.value
Задает выражение, которое будет преобразовано в число и выведено в дерево результатов.Если атрибут value не задан, то элемент <xsl:number> вставляет число на основе положения текущего узла в исходном дереве.формат
Последовательность маркеров, задающая формат, который будет применяться для всех чисел в списке.Если маркеры формата отсутствуют, то используется значение по умолчанию 1, формирующее последовательность 1 2 ...10 11 12....Каждое число после первого отделяется от предыдущего числа разделительным маркером, стоящим перед маркером формата, который использовался для форматирования этого числа.Если разделительные токены отсутствуют, то используется точка («.»).Токен формата
Созданная последовательность
1
1 2 3 4 5 ...10 11 12 ...
01
01 02 03 ...19 10 11 ...99 100 101...
A
A B C ...Z AA AB AC...
i
i ii iii iv v vi vii viii ix x...
I
I II III IV V VI VII VIII IX X...
lang
Указывает алфавит того или иного языка.Если значение не задано, то язык определяется по системной среде.letter-value
Устраняет неоднозначность между последовательностями нумерации, в которых используются буквы.Одна последовательность нумерации может присваивать буквам числовые значения в алфавитном порядке, а другая — каким-то другим способом, традиционным для данного языка.В английском языке примерами могут служить последовательности, задаваемые маркерами формата «a» и «i».В некоторых языках первые члены обеих последовательностей совпадают, и таким образом маркер формата будет неоднозначным.Значение "alphabetic" задает алфавитную последовательность. Значение "traditional" — другую последовательность.Значение по умолчанию — "alphabetic".grouping-separator
Задает разделитель, используемый для группирования (например,групп разрядов) в десятичных числовых последовательностях.Например, выражения grouping-separator="," и grouping-size="3" породят числа вида 1 000 000.Если указан только один из атрибутов grouping-separator и grouping-size, он не учитывается.grouping-size
Указывает размер группы разрядов (обычно 3).Например, выражения grouping-separator="," и grouping-size="3" породят числа вида 1 000 000.Если указан только один из атрибутов grouping-separator и grouping-size, он не учитывается.
Сведения об элементе
Количество вхождений |
Без ограничений |
Родительские элементы |
xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:template, xsl:variable, xsl:when, xsl:with-param, элементы вывода |
Дочерние элементы |
(Нет дочерних элементов) |
Замечания
Число для вставки задается выражением в атрибуте value.Выражение вычисляется, и результирующий объект преобразуется в число.Число округляется до целого, затем преобразуется в строку и вставляется в дерево результата.
Элемент <xsl:number> сначала создает список положительных целых чисел с помощью атрибутов level, count и from:
при значении атрибута level="single" обработчик переходит к первому узлу оси «предок или сам», который соответствует шаблону счета, и создает список длиной единица, содержащий 1+число предшествующих узлов, одноуровневых с данным предком и соответствующих шаблону счета.Если такого предка нет, то создается пустой список.Если указан атрибут from, то ищутся только те предки, которые являются потомками ближайшего предка, соответствующего шаблону from.«Предшествующие одноуровневые узлы» здесь имеют то же значение, что и для оси «предшествующие одноуровневые».
при значении атрибута level="multiple" обработчик помещает в список все предки текущего узла в том порядке, в котором они расположены в документе, а затем сам элемент. После этого он выбирает из списка узлы, соответствующие шаблону счета, затем сопоставляет каждый узел из списка с предшествующими одноуровневыми узлами данного узла в количестве 1+ число таких одноуровневых узлов, соответствующих шаблону счета.Если указан атрибут from, то ищутся только те предки, которые являются потомками ближайшего предка, соответствующего шаблону from.«Предшествующие одноуровневые узлы» здесь имеют то же значение, что и для оси «предшествующие одноуровневые».
При значении level="any" обработчик создает список, содержащий число узлов, соответствующих шаблону счета и принадлежащих набору, который содержит текущий узел и все узлы на всех уровнях документа, предшествующие данному узлу по порядку документа, за исключением узлов пространств имен и атрибутов (иными словами, объединение членов оси предшествования и оси «предок или сам»).Если задан атрибут from, то рассматриваются только узлы, следующие за первым узлом после текущего и соответствующие шаблону from.
Поддерживаются следующие схемы язык/нумерация. ««Токен формата» соответствует атрибуту format, «Язык» — атрибуту lang, а «Буквенное значение» — атрибуту letter-value.
Описание |
Токен формата |
Язык |
Буквенное значение |
---|---|---|---|
Западный |
0x0031 (1) |
нет |
нет |
Заглавная буква |
0x0041 (A) |
нет |
нет |
Строчная буква |
0x0061 (a) |
нет |
нет |
Римские цифры (заглавные) |
0x0049 (I) |
нет |
нет |
Римские цифры (строчные) |
0x0069 (i) |
нет |
нет |
Русский (кириллица, заглавные) |
0x0410 |
нет |
нет |
Русский (кириллица, строчные) |
0x0430 |
нет |
нет |
Иврит, в алфавитном порядке |
0x05d0 |
нет |
По алфавиту |
Иврит, традиционный |
0x05d0 |
нет |
Традиционный |
Арабский |
0x0623 |
нет |
нет |
Хинди, согласные |
0x0905 |
нет |
нет |
Хинди, гласные |
0x0915 |
нет |
нет |
Хинди, числа |
0x0967 |
нет |
нет |
Тайские буквы |
0x0e01 |
нет |
нет |
Тайские числа |
0x0e51 |
нет |
нет |
Японский, Aiueo (двухбайтовый набор символов) |
0x30a2 |
нет |
нет |
Японский, Iroha (двухбайтовый набор символов) |
0x30a4 |
нет |
нет |
Корейский, Chosung |
0x3131 |
нет |
нет |
Тайваньская десятичная |
0x4e01 |
"zh-tw" |
нет |
Korean Decimal |
0x4e01 |
ko |
нет |
Азиатская десятичная |
0x4e01 |
any other lang |
нет |
Азиатская, кандзи |
0x58f1 |
нет |
нет |
Тайваньская (традиционная) |
0x58f9 |
"zh-tw" |
нет |
Китайский (традиционный) |
0x58f9 |
any other lang |
нет |
Китайский «Зодиак» 12 |
0x5b50 |
нет |
нет |
Китайский «Зодиак» 10 |
0x7532 |
нет |
нет |
Китайский «Зодиак» 60 |
0x7532, 0x5b50 |
нет |
нет |
Корейский, Ganada |
0xac00 |
нет |
нет |
Korean Decimal |
0xc77c |
нет |
нет |
Корейский 99 |
0xd558 |
нет |
нет |
Западная (двухбайтовый набор символов) |
0xff11 |
нет |
нет |
Японский, Aiueo (однобайтовый набор символов) |
0xff71 |
нет |
нет |
Японский, Iroha (однобайтовый набор символов) |
0xff72 |
нет |
нет |
Если для устранения неоднозначности в определенной схеме нумерации достаточно токена формата, то задавать язык или буквенное значение не нужно.
Далее приведено несколько примеров спецификаций преобразования.
format="ア" задает нумерацию по алфавиту катакана.
format="イ" задает нумерацию по алфавиту катакана в порядке iroha.
format="๑" задает нумерацию тайскими цифрами.
format="א" letter-value="traditional" задает нумерацию в традиционном порядке для иврита.
format="ა" letter-value="traditional" задает нумерацию грузинскими цифрами.
format="α" letter-value="traditional" задает нумерацию древнегреческими цифрами.
format="а" letter-value="traditional" задает нумерацию старославянскими цифрами.
Пример
Этот пример демонстрирует использование элемента <xsl:number> для нумерации элементов сортированного списка сначала западной нумерацией, затем римскими цифрами в нижнем регистре.
XML-файл (items.xml)
<?xml version='1.0'?>
<?xml-stylesheet type="text/xsl" href="numelem.xsl" ?>
<items>
<item>Car</item>
<item>Pen</item>
<item>LP Record</item>
<item>Wisdom</item>
<item>Cell phone</item>
<item>Film projector</item>
<item>Hole</item>
<item>Canopy</item>
<item>Widget</item>
<item>Concept</item>
<item>Null character</item>
</items>
XSLT-файл (numelem.xsl)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="items">
<xsl:for-each select="item">
<xsl:sort select="."/>
<xsl:number value="position()" format="1. "/>
<xsl:value-of select="."/>,
<xsl:number value="position()" format="i) "/>
<xsl:value-of select="."/>
<br/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Вывод
Далее приведен форматированный вывод.
1.Canopy, i) Canopy 2.Car, ii) Car 3.Cell phone, iii) Cell phone 4.Concept, iv) Concept 5.Film projector, v) Film projector 6.Hole, vi) Hole 7.LP Record, vii) LP Record 8.Null character, viii) Null character 9.Pen, ix) Pen 10.Widget, x) Widget 11.Wisdom, xi) Wisdom
Далее приведен вывод обработчика.
<?xml version="1.0" encoding="UTF-16"?>1.Canopy,
i) Canopy<br />2.Car,
ii) Car<br />3.Cell phone,
...
xi) Wisdom<br />