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

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

Жанры

Технология XSLT

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

Шрифт:
Пример
Листинг 3.8. Входящий документ

<numbers>

 <integer>1</integer>

 <real>1.5</real>

 <integer>2</integer>

 <real>2.6</real>

 <integer>3</integer>

 <real>3.7</real>

</numbers>

Листинг 3.9.
Преобразование

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="text"/>

 <xsl:template match="/">

<xsl:value-of select="numbers/real — numbers/integer"/>

 </xsl:template>

</xsl:stylesheet>

Результат:

0.5

Результирующий фрагмент дерева (result tree fragment)

Четыре типа данных, описанных выше, заимствованы языком XSLT из XPath. Вместе с тем, XSLT имеет и свой собственный тип данных, называемый result tree fragment (результирующий фрагмент дерева).

Для того чтобы понять этот тип данных, обратимся к примеру шаблона:

<xsl:template match="href">

 <B>You may visit the <A href="#">following link</A>.</B>

</xsl:template>

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

<href>

 <location>http://www.xsltdev.ru</location>

</href>

то получим следующий результат:

<B>You may visit the <A href="#">following link</A>.</B>

В терминах деревьев выполнение этого шаблона показано на рис. 3.17.

Рис. 3.17. Часть дерева входящего документа и часть дерева сгенерированного документа

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

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

выполнения шаблонов, которые они вызывают и в итоге множество веток срастается в одно большое дерево, которое и является целью преобразования.

Между тем, результирующие фрагменты деревьев могут и не попасть в само результирующее дерево, то есть совершенно не факт, что они всегда будут его частями. Например, результирующий фрагмент дерева может быть присвоен переменной как начальное значение. Это предоставляет следующие, очень интересные возможности.

□ Переменная может содержать дерево, являющееся результатом обработки документа. К сожалению, в чистом XSLT нельзя повторно обрабатывать части документов, однако, это реализуется при помощи механизма расширений.

□ Дерево может быть определено один раз в виде значения переменной и использовано несколько раз в выходящем документе.

Пример
Листинг 3.10. Входящий документ

<href>

 <location>http://www.xsltdev.ru</location>

</href>

Листинг 3.11. Преобразование

<xsl:stylesheet

 version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:variable name="href">

<body>

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

</body>

 </xsl:variable>

 <xsl:template match="href">

<B>You may visit the <A href="#">following link</A>.</B>

 </xsl:template>

 <xsl:template match="/">

<result>

<xsl:text>&#xA;Result as string:&#xA;</xsl:text>

<xsl:value-of select="$href"/>

<xsl:text>&#xA;Result as tree:&#xA;</xsl:text>

<xsl:copy-of select="$href"/>

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

</result>

 </xsl:template>

</xsl:stylesheet>

Листинг 3.12. Выходящий документ

<result>

 Result as string:

 You may visit the following link.

 Result as tree:

 <body><B>You may visit the <A href="#">following

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

Боевая ботаника и с чем ее едят

Дэвлин Джейд
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Боевая ботаника и с чем ее едят

Эпоха Опустошителя. Том I

Павлов Вел
1. Вечное Ристалище
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эпоха Опустошителя. Том I

Законы Рода. Том 12

Андрей Мельник
12. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 12

Холодный ветер перемен

Иванов Дмитрий
7. Девяностые
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Холодный ветер перемен

Князь Барсов

Петров Максим Николаевич
1. РОС. На мягких лапах
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Князь Барсов

На границе империй. Том 10. Часть 9

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 9

Как я строил магическую империю

Зубов Константин
1. Как я строил магическую империю
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Барон устанавливает правила

Ренгач Евгений
6. Закон сильного
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Барон устанавливает правила

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

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

Законы рода

Андрей Мельник
1. Граф Берестьев
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Законы рода

Месть бывшему. Замуж за босса

Россиус Анна
3. Власть. Страсть. Любовь
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Месть бывшему. Замуж за босса

Соло. Книга 2

Маханенко Василий Михайлович
2. Соло
Фантастика:
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Соло. Книга 2

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

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