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

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

Жанры

Технология XSLT

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

Шрифт:

<tr>

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

</tr>

 </table>

</xsl:template>

Выполняться он будет в следующем контексте (рис. 3.21):

Рис. 3.21. Контекст шаблона элемента

summer

Атрибут

select
элемента
xsl:apply-templates,
который присутствует в этом шаблоне, вычисляет новое текущее множество: путь выборки
month
возвращает все дочерние элементы
month
текущего узла. Текущим узлом является элемент
summer
, то есть новое текущее множество будет состоять из трех его дочерних элементов
month
. Таким образом, процессор будет поочередно выполнять шаблоны в каждом из трех следующих контекстов, показанных на рис. 3.22.

Рис. 3.22. Изменение контекста при выполнении шаблона элемента

month

Шаблон, вычисляемый в каждом из этих контекстов, имеет следующий вид:

<xsl:template match="month">

 <td>

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

 </td>

</xsl:template>

Элемент

xsl:value-of
этого шаблона создает в элементе
td
текстовый узел, значение которого равно строковому значению выражения "
.
", то есть строковому значению текущего узла, и в каждом случае это будет строковое значение соответствующего элемента
month
.

Контекст преобразования позволяет более четко определить такие понятия, как "обработка узла", "применение шаблона к узлу" и так далее. Все эти выражения означают одно: выполнение соответствующего шаблона с данным узлом в качестве текущего.

Выполнение преобразования

Несмотря на полную свободу в порядке выполнения шаблонов, правила изменения контекста и компоновки результирующего дерева, спецификация XSLT оговаривает очень четко — это делает XSLT весьма гибким языком, программы на котором при этом выполняются совершенно детерминированным образом.

Типовой процесс выполнения преобразования согласно спецификации включает следующие стадии:

□ дерево выходящего документа создается путем обработки множества, состоящего из единственного узла — текущего узла дерева;

□ результатом применения шаблонов к обрабатываемому множеству узлов является объединение фрагментов деревьев, которые являются результатами обработки каждого из узлов множества;

□ каждый из узлов обрабатываемого множества преобразуется следующим образом:

 • из всех шаблонов, определенных в данном преобразовании, выбираются шаблоны, соответствующие данному узлу (соответствие определяется паттерном, указанным в атрибуте

match
элемента
xsl:template
);

 • из этих шаблонов выбирается наиболее подходящий;

 • выбранный шаблон выполняется в контексте обрабатываемого множества как текущего множества узлов и обрабатываемого узла как текущего узла;

□ если шаблон содержит инструкции

xsl:apply-templates
или
xsl:foreach
, которые дополнительно выбирают узлы для обработки, процесс рекурсивно продолжается до тех пор, пока обрабатываемое множество будет содержать хотя бы один узел.

В общих чертах этот процесс был продемонстрирован на примере, приведенном в описании контекста преобразования. Сейчас мы завершим картину, показав, как в каждом из шаблонов будут создаваться результирующие фрагменты деревьев и как они затем будут "сращиваться" в дерево выходящего документа.

На сей раз, мы начнем с самых "глубоких" шаблонов — шаблонов, обрабатывающих элементы

month
.

<xsl:template match="month">

 <td>

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

 </td>

</xsl:template>

Каждый из них создает результирующий фрагмент дерева следующего вида (рис. 3.23).

Рис. 3.23. Результат обработки элемента month

Шаблоны к элементам

month
применяются элементом
xsl:apply-templates
при обработке элемента
summer
соответствующим шаблоном:

<xsl:template match="summer">

 <table>

<tr>

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

</tr>

 </table>

</xsl:template>

Результатом выполнения

xsl:apply-templates
будет объединение результирующих фрагментов деревьев, которые получатся при обработке элементов
month
. Таким образом, результирующий фрагмент этого шаблона будет "собран" в следующем виде (рис. 3.24):

Рис. 3.24. Результат обработки элемента

summer

Пунктиром выделены результирующие фрагменты деревьев, сгенерированные при обработке элементов

month
; эти фрагменты объединяются и используются при создании фрагмента дерева, являющегося результатом обработки элемента
summer
.

Этот результат, в свою очередь, используется в главном шаблоне — шаблоне, который обрабатывает корневой элемент:

<xsl:template match="/">

 <html>

<head>

<title>Summer</title>

</head>

<body>

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

</body>

 </html>

</xsl:template>

Сгенерированный при обработке элемента

summer
результирующий фрагмент дерева включается в корневом шаблоне в элемент
body
(рис.3.25).

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

Мимик нового Мира 10

Северный Лис
9. Мимик!
Фантастика:
юмористическое фэнтези
альтернативная история
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 10

Польская партия

Ланцов Михаил Алексеевич
3. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Польская партия

Здравствуй, 1984-й

Иванов Дмитрий
1. Девяностые
Фантастика:
альтернативная история
6.42
рейтинг книги
Здравствуй, 1984-й

Темный Лекарь 3

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

Назад в СССР: 1986 Книга 5

Гаусс Максим
5. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Назад в СССР: 1986 Книга 5

Наследница Драконов

Суббота Светлана
2. Наследница Драконов
Любовные романы:
современные любовные романы
любовно-фантастические романы
6.81
рейтинг книги
Наследница Драконов

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

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Не кровный Брат

Безрукова Елена
Любовные романы:
эро литература
6.83
рейтинг книги
Не кровный Брат

Ты нас предал

Безрукова Елена
1. Измены. Кантемировы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Ты нас предал

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

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

Последний Паладин. Том 7

Саваровский Роман
7. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 7

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Калибр Личности 1

Голд Джон
1. Калибр Личности
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Калибр Личности 1

Вторая жизнь майора. Цикл

Сухинин Владимир Александрович
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Вторая жизнь майора. Цикл