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

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

Жанры

Технология XSLT

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

Шрифт:

<xsl:element name="element"

use-attribute-sets="elements attrs">

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

</xsl:element>

 </xsl:template>

</xsl:stylesheet>

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

<?xml version="1.0" encoding="utf-8"?>

<element name="a" node-count="1" attr-count="2">

 <element name="d" node-count="0" attr-count="3"/>

</element>

В

этом преобразовании определение элемента

<xsl:element name="element"

 use-attribute-sets="elements attrs">

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

</xsl:element>

равносильно определению

<xsl:element name="element">

 <xsl:attribute name="name">

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

 </xsl:attribute>

 <xsl:attribute name="node-count">

<xsl:value-of select="count(*)"/>

 </xsl:attribute>

 <xsl:attribute name="attr-count">

<xsl:value-of select="count(@*)"/>

 </xsl:attribute>

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

</xsl:element>

Как уже было сказано, элемент

xsl:attribute-set
может также использовать другие наборы атрибутов при помощи
use-attribute-sets
. Например, в предыдущем преобразовании набор атрибутов
elements
мог быть определен как:

<xsl:attribute-set name="elements"

 use-attribute-sets="attrs">

 <xsl:attribute name="name">

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

 </xsl:attribute>

 <xsl:attribute name="node-count">

<xsl:value-of select="count(*)"/>

 </xsl:attribute>

</xsl:attribute-set>

Тогда для достижения того же результата элемент с именем

element
мог быть создан с использованием только одного набора атрибутов:

<xsl:element name="element"

 use-attribute-sets="elements">

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

</xsl:element>

Именованный набор атрибутов не может прямо или косвенно (посредством других наборов атрибутов) использовать в значении

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

Атрибут xsl:use-attribute-sets

Мы

упомянули о том, что именованные наборы атрибутов используются в элементах посредством атрибута
xsl:use-attribute-sets
. Разберем более детально, где этот атрибут может применяться, и какие функции он при этом выполняет. Для удобства эти данные сведены в табл. 7.1.

Таблица 7.1. Использование атрибута

xsl:use-attribute-sets

Родительский элемент Особенности использования
xsl:attribute-set
Включает в определяемый набор атрибутов атрибуты из перечисленных наборов
xsl:element
Включает в создаваемый элемент атрибуты из перечисленных наборов. Включение эквивалентно текстовому включению — значения атрибутов вычисляются в контексте создающего элемента
xsl:element
xsl:copy
Включает в копируемый элемент атрибуты из перечисленных наборов. Принцип действия— как в случае с
xsl:element
. Копируемый узел должен быть элементом
Литеральный результирующий элемент Принцип действия такой же, как и в случае с
xsl:element
. В случае совпадения имен, значения атрибутов из набора будут переопределять значения атрибутов самого элемента. При использовании в литеральном элементе, атрибут
xsl:use-attribute-sets
должен быть обязательным образом объявлен принадлежащим пространству имен XSLT. Как правило, это делается указанием префикса
xsl

Создание текстовых узлов

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

Рассмотрим пример.

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

<answer>No!</answer>

Листинг 7.12. Шаблон преобразования

<xsl:template match="answer">

 The answer was &quot;<xsl:value-of select="text"/>&quot;.

</xsl:template>

Листинг 7.13. Созданный текст

The answer was "No!".

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

xsl:text
и
xsl:value-of
. Элемент
xsl:text
используется для создания текстовых узлов, содержащих пробельные и специальные символы, в то время как элемент
xsl:value-of
выводит в выходящее дерево строковый результат вычисления выражений.

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

Тайны затерянных звезд. Том 1

Лекс Эл
1. Тайны затерянных звезд
Фантастика:
боевая фантастика
космическая фантастика
фэнтези
5.00
рейтинг книги
Тайны затерянных звезд. Том 1

Кровь эльфов

Сапковский Анджей
3. Ведьмак
Фантастика:
фэнтези
9.23
рейтинг книги
Кровь эльфов

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

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Штуцер и тесак

Дроздов Анатолий Федорович
1. Штуцер и тесак
Фантастика:
боевая фантастика
альтернативная история
8.78
рейтинг книги
Штуцер и тесак

Сын Петра. Том 1. Бесенок

Ланцов Михаил Алексеевич
1. Сын Петра
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Сын Петра. Том 1. Бесенок

Имперский Курьер

Бо Вова
1. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Имперский Курьер

Вечный. Книга I

Рокотов Алексей
1. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга I

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Корсар

Русич Антон
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.29
рейтинг книги
Корсар

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Генерал Империи

Ланцов Михаил Алексеевич
4. Безумный Макс
Фантастика:
альтернативная история
5.62
рейтинг книги
Генерал Империи

Мерзавец

Шагаева Наталья
3. Братья Майоровы
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
5.00
рейтинг книги
Мерзавец

На границе империй. Том 7

INDIGO
7. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
6.75
рейтинг книги
На границе империй. Том 7