Элемент <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="&#x30A2;" задает нумерацию по алфавиту катакана.

format="&#x30A4;" задает нумерацию по алфавиту катакана в порядке iroha.

format="&#x0E51;" задает нумерацию тайскими цифрами.

format="&#x05D0;" letter-value="traditional" задает нумерацию в традиционном порядке для иврита.

format="&#x10D0;" letter-value="traditional" задает нумерацию грузинскими цифрами.

format="&#x03B1;" letter-value="traditional" задает нумерацию древнегреческими цифрами.

format="&#x0430;" 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="&#x0069;) "/>
      <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 />