Элемент <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
    Шаблон Шаблоны (XSLT), указывающий узлы, которые следует учитывать на этих уровнях. Если атрибут count не задан, то по умолчанию используется шаблон, которому соответствует любой узел того же типа, что и текущий узел, и если у текущего узла есть расширенное имя, то с тем же расширенным именем, что у текущего узла.

  • from
    Шаблон Шаблоны (XSLT), указывающий, с какой точки начинается отсчет.

  • value
    Задает выражение, которое будет преобразовано в число и выведено в дерево результатов. Если атрибут value не задан, то элемент <xsl:number> вставляет число на основе положения текущего узла в исходном дереве.

  • format
    Последовательность маркеров, задающая формат, который будет применяться для всех чисел в списке. Если маркеры формата отсутствуют, то используется значение по умолчанию 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
    Указывает алфавит того или иного языка. Если значение lang не задано, язык определяется по настройкам системы.

  • буквенное значение
    Устраняет неоднозначность между последовательностями нумерации, в которых используются буквы. Одна последовательность нумерации может присваивать буквам числовые значения в алфавитном порядке, а другая - каким-то другим способом, традиционным для данного языка. В английском языке примерами могут служить последовательности, задаваемые маркерами формата «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

Н/Д

Chinese "Zodiac" 12

0x5b50

Н/Д

Н/Д

Chinese "Zodiac" 10

0x7532

Н/Д

Н/Д

Chinese "Zodiac" 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 />