Чтение онлайн

на главную

Жанры

Технология 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

a) paragraph 1

b) paragraph 2

c) paragraph 3

1.2. Second section

d) paragraph 4

e) paragraph 5

2. Second chapter

2.1 Third section

f) paragraph 6

g) paragraph 7

h) paragraph 8

i) paragraph 9

2.2 Forth section

j) paragraph 10

k) paragraph 11

l) paragraph 12

2.3 Fifth section

m) paragraph 13

n) paragraph 14

o) paragraph 15

p) paragraph 16

3. Third chapter

3.1 Sixth section

q) paragraph 17

r) paragraph 18

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

Менталист. Эмансипация

Еслер Андрей
1. Выиграть у времени
Фантастика:
альтернативная история
7.52
рейтинг книги
Менталист. Эмансипация

Кодекс Охотника. Книга V

Винокуров Юрий
5. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.50
рейтинг книги
Кодекс Охотника. Книга V

Виконт. Книга 1. Второе рождение

Юллем Евгений
1. Псевдоним `Испанец`
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.67
рейтинг книги
Виконт. Книга 1. Второе рождение

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

(Не)свободные, или Фиктивная жена драконьего военачальника

Найт Алекс
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
(Не)свободные, или Фиктивная жена драконьего военачальника

Месть Паладина

Юллем Евгений
5. Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Месть Паладина

Новый Рал

Северный Лис
1. Рал!
Фантастика:
фэнтези
попаданцы
5.70
рейтинг книги
Новый Рал

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Прометей: владыка моря

Рави Ивар
5. Прометей
Фантастика:
фэнтези
5.97
рейтинг книги
Прометей: владыка моря

Тринадцатый

NikL
1. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.80
рейтинг книги
Тринадцатый

Мастер темных Арканов

Карелин Сергей Витальевич
1. Мастер темных арканов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Мастер темных Арканов

Дайте поспать! Том II

Матисов Павел
2. Вечный Сон
Фантастика:
фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Дайте поспать! Том II

Возрождение Феникса. Том 1

Володин Григорий Григорьевич
1. Возрождение Феникса
Фантастика:
фэнтези
попаданцы
альтернативная история
6.79
рейтинг книги
Возрождение Феникса. Том 1

Его темная целительница

Крааш Кира
2. Любовь среди туманов
Фантастика:
фэнтези
5.75
рейтинг книги
Его темная целительница