Kniga-Online.club

Алексей Валиков - Технология XSLT

Читать бесплатно Алексей Валиков - Технология XSLT. Жанр: Программирование издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

 lang="{токен}"

 letter-value={ "alphabetic"

              | "traditional" }

 grouping-separator="{символ}"

 grouping-size="{число}"/>

Элемент xsl:number вычисляет номер узла в соответствии с заданными критериями, форматирует его и затем вставляет в результирующее дерево в виде текстового узла. То, что все это выполняется в одном элементе преобразования, имеет существенные преимущества по сравнению с использованием XPath-выражений: программа становится более простой и понятной, причем далеко не в ущерб функциональности.

К сожалению, в этом случае, как и во многих других, универсальность использования повлекла за собой семантическую сложность. Несмотря на то, что xsl:number имеет всего девять атрибутов (причем ни один из них не является обязательным), мы посвятим их описанию значительное количество страниц. Пока же, чтобы сориентировать читателя, мы кратко перечислим назначения атрибутов xsl:number.

□ Атрибут level указывает, на каких уровнях дерева следует искать нумеруемые узлы.

□ Атрибут count указывает, какие именно узлы следует считать при вычислении номера.

□ Атрибут from указывает, в какой части документа будет производиться нумерация.

□ Атрибут value задает выражения, которые следует использовать для вычисления значения номера.

□ Атрибут format определяет, как номер будет форматироваться в строку.

□ Атрибут lang задает языковой контекст нумерации.

□ Атрибут 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>&#xA;</xsl:text>

</xsl:template>

Листинг 8.33. Вариант нумерующего шаблона с использованием xsl:number

<xsl:template match="chapter">

 <xsl:number value="position()" format="1. "/>

 <xsl:value-of select="@title"/>

 <xsl:text>&#xA;</xsl:text>

</xsl:template>

Результат обоих шаблонов имеет следующий вид:

1. First chapter

2. Second chapter

3. Third chapter

Использование xsl:number даже в этом простом случае сэкономило одну строчку в коде. Однако, если бы вместо нумерации арабскими цифрами (1, 2, 3 и т.д.) нужно было применить нумерацию римскими цифрами (I, II, III и т.д.), в преобразовании с xsl:number мы бы изменили всего один символ (вместо format="1. " указали бы format="I. "), в то время как в преобразовании с xsl:value-of пришлось бы писать сложную процедуру преобразования числа в римскую запись.

В том случае, если атрибут value опущен, номера элементов вычисляются исходя из значений атрибутов level, count и from.

Атрибут level имеет три варианта значений: single, multiple и any, значением по умолчанию является single. Процедура вычисления номеров существенным образом зависит от того, какой из этих вариантов используется — при методе single считаются элементы на одном уровне, при методе multiple — на нескольких уровнях и при методе any — на любых уровнях дерева. Алгоритм вычисления списка номеров в каждом из случаев не слишком сложен, но понять его только по формальному описанию довольно непросто. Поэтому каждый из методов будет дополнительно проиллюстрирован примерами вычисления.

Атрибут count содержит паттерн, которому должны удовлетворять нумеруемые узлы. Узлы, не соответствующие этому образцу, просто не будут приниматься в расчет. Значением этого атрибута по умолчанию является паттерн, выбирающий узлы с тем же типом и именем, что и у текущего узла (если, конечно, у него есть имя).

Атрибут from содержит паттерн, который определяет так называемую область нумерации, или область подсчета. При вычислении номера будут приниматься во внимание только те нумеруемые узлы, которые принадлежат этой области. По умолчанию областью подсчета является весь документ.

Метод single

Метод single используется для того, чтобы вычислить номер узла, основываясь на его позиции среди узлов того же уровня. Нумерацию, в которой используется метод single, также называют одноуровневой нумерацией.

Областью нумерации этого метода будет множество всех потомков ближайшего предка текущего узла, удовлетворяющего паттерну, указанному в атрибуте from.

Вычисление номера производится в два шага.

□ На первом шаге находится узел уровня дерева. Узлом уровня будет узел, удовлетворяющий следующим условиям:

 • он является первым (то есть ближайшим к текущему) узлом, принадлежащим оси ancestor-or-self текущего узла;

 • он удовлетворяет паттерну count;

 • он принадлежит области подсчета;

 • если такого узла нет, список номеров будет пустым.

□ На втором шаге вычисляется номер узла уровня. Этот номер будет равен 1 плюс количество узлов, принадлежащих оси навигации preceding-sibling и удовлетворяющих паттерну count.

Надо сказать, от атрибута from в методе single мало пользы. Единственный эффект, который можно от него получить, — это пустой список номеров в случае, если первый узел, принадлежащий оси ancestor-or-self и удовлетворяющий паттерну count, не будет иметь предка, соответствующего паттерну атрибута from.

Пример

Разберем функционирование одноуровневой нумерации в следующем шаблоне:

<xsl:template match="para">

Перейти на страницу:

Алексей Валиков читать все книги автора по порядку

Алексей Валиков - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Технология XSLT отзывы

Отзывы читателей о книге Технология XSLT, автор: Алексей Валиков. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*