Областью нумерации этого метода будет множество всех узлов, следующих в порядке просмотра документа за первым предком текущего узла, который удовлетворяет паттерну, указанному в атрибуте
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
</xsl:text>
<xsl:text>==================
</xsl:text>
<xsl:apply-templates select="chapter"/>
</xsl:template>
<xsl:template match="chapter">
<xsl:number format="1. "/>
<xsl:value-of select="@title"/>
<xsl:text>
</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>
</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>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Опишем
словесно нумерацию, которая будет применяться в этом преобразовании.
□ Элементы
chapter
будут нумероваться в соответствии со своей позицией среди других элементов
chapter
того же уровня.
□ Элементы
section
будут нумероваться при помощи многоуровневой нумерации — номер будет состоять из номера элемента
chapter
и номера самого элемента
section
.
□ Элементы
para
будут нумероваться исходя из своей позиции среди всех остальных элементов
para
вне зависимости от того, на каких уровнях в документе они находятся.
Результатом применения этого преобразования к документу, приведенному в листинге 8.31, будет следующий текст.