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

на главную

Жанры

Технология XSLT

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

Шрифт:

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

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

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

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

</xsl:template>

Мы продемонстрируем вычисление номера одного из элементов

para
на схематическом изображении дерева обрабатываемого документа (рис. 8.1). Узел обрабатываемого элемента мы выделим полужирной линией, узел элемента
doc
пометим буквой
d
, узлы элементов
chapter
буквой
с
, элементов
section
и para — буквами
s
и
p
соответственно.

Рис. 8.1. Дерево обрабатываемого документа

В качестве первого примера приведем вычисление номера элементом

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

На первом шаге нам нужно найти узел уровня дерева. Этим узлом будет первый элемент

section
, являющийся предком текущего узла. На рис. 8.2 он обведен пунктиром.

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

Номер этого элемента будет равен

1
плюс количество предшествующих ему братских элементов
section
. Это множество выделено пунктиром на рис. 8.3.

Рис. 8.3. Второй шаг вычисления номера

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

3
.

Проведем такой же разбор для определения

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

В этом случае паттерну, указанному в элементе

count
удовлетворяет сам текущий узел, значит, он и будет являться узлом уровня, как это показано на рис. 8.4.

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

Выделим множество элементов

para
, являющихся братьями узла уровня и предшествующих ему (рис. 8.5).

Рис. 8.5. Второй шаг вычисления номера

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

2
.

Таким образом, результатом обработки выделенного элемента

para
будет следующая строка:

3.2.paragraph 14

Метод multiple

Метод

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

Область нумерации метода

multiple
определяется так же, как и в случае с методом
single
: учитываются только потомки ближайшего предка текущего узла, удовлетворяющего паттерну, указанному в атрибуте
from
.

Вычисление списка номеров узлов выполняется в два этапа:

□ На первом этапе

выбирается множество нумеруемых узлов, удовлетворяющее следующим условиям:

 • его узлы принадлежат оси навигации

ancestor-or-self
текущего узла;

 • его узлы соответствуют паттерну

count
;

 • его узлы принадлежат области подсчета.

□ На втором этапе для каждого узла нумеруемого множества вычисляется позиция среди собратьев. Позиция нумеруемого узла будет равна

1
плюс количество узлов, принадлежащих его оси навигации
preceding-sibling
и соответствующих паттерну
count
.

Пример

Для демонстрации вычисления номеров на нескольких уровнях дерева документа проследим за выполнением инструкции

<xsl:number

 format=" 1.1."

 level="multiple"

 count="doc|chapter|para"

 from="doc"/>

при обработке того же элемента

para
.

Прежде всего, надо определить область подсчета. Значением атрибута

from
является паттерн
doc
, значит, подсчет будет вестись среди всех потомков ближайшего к текущему элементу
para
предка, который является элементом
doc
. Это множество выделено на рис. 8.6 штрих-пунктирной линией.

Рис. 8.6. Определение области подсчета

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

ancestor-or-self
текущего узла para и удовлетворяющие паттерну
doc|chapter|para
. Это множество будет включать сам текущий элемент, а также его предки
chapter
и
doc
. На рис. 8.7 они обведены пунктиром.

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

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

Рис. 8.8. Второй шаг вычисления номера

Мы получили множество узлов, состоящее всего из двух элементов —

chapter
и
para
вследствие того, что элемент
doc
был исключен как не входящий в область подсчета. Выделим множества пересчитываемых узлов, предшествующих нумеруемым элементам (рис. 8.9).

Рис. 8.9. Третий шаг вычисления номера

В этом примере элемент

chapter
, так же как и элемент
para
, будет иметь номер
2
. Соответственно, результатом выполнения инструкции
xsl:number
в этом случае будет строка

2.2.paragraph 14

Метод any

Метод

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

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

Снегурка для опера Морозова

Бигси Анна
4. Опасная работа
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Снегурка для опера Морозова

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

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

Архил…? Книга 3

Кожевников Павел
3. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
7.00
рейтинг книги
Архил…? Книга 3

Ну привет, заучка...

Зайцева Мария
Любовные романы:
эро литература
короткие любовные романы
8.30
рейтинг книги
Ну привет, заучка...

Генерал-адмирал. Тетралогия

Злотников Роман Валерьевич
Генерал-адмирал
Фантастика:
альтернативная история
8.71
рейтинг книги
Генерал-адмирал. Тетралогия

Не грози Дубровскому! Том IX

Панарин Антон
9. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том IX

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Лорд Системы 4

Токсик Саша
4. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 4

Рота Его Величества

Дроздов Анатолий Федорович
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Рота Его Величества

Мастер Разума IV

Кронос Александр
4. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума IV

Возвышение Меркурия. Книга 13

Кронос Александр
13. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 13

Ученик. Книга третья

Первухин Андрей Евгеньевич
3. Ученик
Фантастика:
фэнтези
7.64
рейтинг книги
Ученик. Книга третья

Кодекс Крови. Книга V

Борзых М.
5. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга V

Сердце Дракона. Том 11

Клеванский Кирилл Сергеевич
11. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.50
рейтинг книги
Сердце Дракона. Том 11