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

на главную - закладки

Жанры

Технология 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. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности

Попаданка в семье драконов 2

Свадьбина Любовь
6. Избранницы правителей Эёрана
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Попаданка в семье драконов 2

Неудержимый. Книга IX

Боярский Андрей
9. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга IX

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Развод, который ты запомнишь

Рид Тала
1. Развод
Любовные романы:
остросюжетные любовные романы
короткие любовные романы
5.00
рейтинг книги
Развод, который ты запомнишь

Мастер 9

Чащин Валерий
9. Мастер
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Мастер 9

Лучший из худших

Дашко Дмитрий
1. Лучший из худших
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Лучший из худших

Наследник

Шимохин Дмитрий
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
Наследник

Жандарм

Семин Никита
1. Жандарм
Фантастика:
попаданцы
альтернативная история
аниме
4.11
рейтинг книги
Жандарм

Хозяин Теней 2

Петров Максим Николаевич
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 2

Газлайтер. Том 18

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

Недотрога для темного дракона

Панфилова Алина
Фантастика:
юмористическое фэнтези
фэнтези
сказочная фантастика
5.00
рейтинг книги
Недотрога для темного дракона

Часовая башня

Щерба Наталья Васильевна
3. Часодеи
Фантастика:
фэнтези
9.43
рейтинг книги
Часовая башня

Его нежеланная истинная

Кушкина Милена
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Его нежеланная истинная