Валиков Алексей Н.
Шрифт:
□ Атрибут
letter-value
определяет параметры буквенных методов нумерации. □ Атрибут
grouping-separator
задает символ, разделяющий группы цифр в номере. □ Атрибут
grouping-size
определяет количество цифр в одной группе. Выполнение элемента
xsl:number
можно условно разделить на два этапа — вычисление номера и его строковое форматирование. На этапе вычисления активными являются элементы level
, count
, from
и value
. Форматирование производится с учетом значений атрибутов format
, lang
, letter-value
, grouping-separator
и grouping-size
. Результатом первого этапа является список номеров, который форматируется в текстовый узел на втором этапе. Вычисление номеров
Пожалуй, самым простым для понимания (но не самым простым в использовании) способом вычисления номера является использование XPath-выражений. Этот способ практически идентичен использованию
xsl:value-of
, как было показано в начале этой главы. Единственным отличием xsl:number
является то, что после вычисления номера он сначала форматируется, а потом уже вставляется в результирующее дерево в виде текстового узла. Результатом первого этапа форматирования при определенном атрибуте
value
является список, состоящий из числа, полученного в результате вычисления выражения, указанного в значении этого атрибута. Пример
В этом и нескольких следующих примерах мы будем вычислять номера в одном и том же документе, который представлен в листинге 8.31.
Листинг 8.31. Входящий документ для примеров преобразований с использованием xsl:number
<doc>
<chapter title="First chapter">
<section title="First section">
<para>paragraph 1</para>
<para>paragraph 2</para>
<para>paragraph 3</para>
</section>
<section title="Second section">
<para>paragraph 4</para>
<para>paragraph 5</para>
</section>
</chapter>
<chapter title="Second chapter">
<section title="Third section">
<para>paragraph 6</para>
<para>paragraph 7</para>
<para>paragraph 8</para>
<para>paragraph 9</para>
</section>
<section title="Forth section">
<para>paragraph 10</para>
<para>paragraph 11</para>
<para>paragraph 12</para>
</section>
<section title="Fifth section">
<para>paragraph 13</para>
<para>paragraph 14</para>
<para>paragraph 15</para>
<para>paragraph 16</para>
</section>
</chapter>
<chapter title="Third chapter">
<section title="Sixth section">
<para>paragraph 17</para>
<para>paragraph 18</para>
</section>
</chapter>
</doc>
В качестве первого примера приведем два шаблона, обрабатывающих элементы
chapter
: один с использованием xsl:value-of
, а второй с использованием xsl:number
. Листинг 8.32. Вариант нумерующего шаблона с использованием xsl:value-of
<xsl:template match="chapter">
<xsl:value-of select="position"/>
<xsl:text>. </xsl:text>
<xsl:value-of select="@title"/>
<xsl:text>
</xsl:text>
</xsl:template>
Листинг 8.33. Вариант нумерующего шаблона с использованием xsl:number
<xsl:template match="chapter">
<xsl:number value="position" format="1. "/>