Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

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

from
.

Номер вычисляется как

1
плюс количество узлов области подсчета, удовлетворяющих паттерну
count
и предшествующих в порядке просмотра документа текущему узлу.

Пример

В качестве примера применения метода

any
вычислим порядковый номер элемента
para
среди всех элементов документа, начиная со второй главы. Инструкцию такого рода мы запишем в виде

<xsl:number

 format=" 1."

 level="any"

 count="*"

 from="chapter[2]"/>

При ее выполнении мы сначала определим область, в которой будут подсчитываться узлы (обведены штрих-пунктирной линией на рис. 8.10).

Рис. 8.10. Определение области подсчета узлов

Следующим шагом выделим подмножество области подсчета, предшествующее в порядке просмотра текущему узлу

para
(рис. 8.11).

Рис. 8.11. Первый шаг вычисления номера

Выделенное множество содержит 11 узлов, значит, искомый номер будет равен

12
.

Перед тем, как перейти к рассмотрению способов форматирования номеров, приведем итоговый пример (листинг 8.34), в котором в шаблонах будут использоваться все три метода нумерации.

Листинг 8.34. Шаблон, использующий разные методы нумерации

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"»

 <xsl:template match="doc">

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

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

<xsl:apply-templates select="chapter"/>

 </xsl:template>

 <xsl:template match="chapter">

<xsl:number format="1. "/>

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

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

<xsl:apply-templates select="section"/>

 </xsl:template>

 <xsl:template match="section">

<xsl:number format=" 1.1 "

level="multiple"

count="chapter|section"/>

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

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

<xsl:apply-templates select="para"/>

 </xsl:template>

 <xsl:template match="para">

<xsl:number

format=" a) "

level="any"

count="para"/>

<xsl:value-of select="."/>

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

 </xsl:template>

</xsl:stylesheet>

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

□ Элементы

chapter
будут нумероваться в соответствии со своей позицией среди других элементов
chapter
того же уровня.

□ Элементы

section
будут нумероваться при помощи многоуровневой нумерации — номер будет состоять из номера элемента
chapter
и номера самого элемента
section
.

□ Элементы

para
будут нумероваться исходя из своей позиции среди всех остальных элементов
para
вне зависимости от того, на каких уровнях в документе они находятся.

Результатом применения этого преобразования к документу, приведенному в листинге 8.31, будет следующий текст.

Листинг 8.35. Выходящий документ

Resulting document

==================

1. First chapter

1.1 First section

  • Читать дальше
  • 1
  • ...
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: