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

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

Жанры

Технология XSLT

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

Шрифт:

Текстовое значение атрибута может задаваться не только символьными данными, Оно может генерироваться также элементами XSLT, такими, как, например,

xsl:text
и
xsl:value-of
. То есть вполне корректным будет следующее определение:

<xsl:attribute name="href">

 <xsl:text>http://</xsl:text>

 <xsl:value-of select="concat('www', '.', 'bbb')"/>

 <xsl:text>.com</xsl:text>

</xsl:attribute>

В

том случае, если текстовое значение атрибута содержит символы перевода строки, при генерации атрибута они будут заменены сущностями, то есть определение

<xsl:attribute name="href">а¶

 b</xsl:attribute>

создаст атрибут с именем "

href
" и значением "
a&#xA;b
":

<а href="#"/>

Техническая рекомендация объясняет такую ситуацию следующим образом: в соответствии со стандартом языка XML, символы перевода строки должны нормализоваться в значениях атрибутов пробелами, сущности же нормализовать не нужно. Но если бы символ перевода строки нормализовался в XSLT при выводе пробелом, то определения

<xsl:attribute name="href">a□b</xsl:attribute>

и

<xsl:attribute name="href">a¶

b</xsl:attribute>

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

&#xA;
или
&#10;
).

Подводя итог, перечислим в краткой форме основные особенности обращения с

xsl:attribute
.

□ Атрибуты могут создаваться только в узлах элементов. Если атрибут создается в узле, который не является узлом элемента, процессор может либо выдать ошибку, либо проигнорировать создаваемый атрибут.

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

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

□ В случае, когда документ преобразуется в другой XML-документ, символы перевода строки в элементе заменяются символьными сущностями.

Именованные наборы атрибутов

Элемент xsl:attribute-set

Синтаксис элемента определяется следующей конструкцией:

<xsl:attribute-set

 name="имя"

 use-attribute-sets="имена">

 <!-- Содержимое: несколько элементов xsl:attribute -->

</xsl:attribute-set>

Для

того чтобы упростить создание в элементах целых наборов атрибутов, можно заранее определить их в элементе
xsl:attribute-set
. Обязательный атрибут
name
задает имя набора атрибутов. Элемент
xsl:attribute-set
содержит последовательность, состоящую из нуля или более элементов
xsl:attribute
.

Именованные наборы атрибутов можно использовать, указывая их имена в значении атрибута

use-attribute-sets
, который может присутствовать в элементах
xsl:element
,
xsl:copy
и
xsl:attribute-set
, а также в литеральных результирующих элементах. В атрибуте
use-attribute-sets
через пробел перечисляются имена наборов атрибутов, которые должны быть использованы в данном элементе.

Включение набора атрибутов в элемент равносильно простому копированию элементов

xsl:attribute
, определенных в соответствующих элементах
xsl:attribute-set
.

Пример

Предположим, что во входящем документе нам нужно вывести структуру, состоящую из элементов с именем

element
, атрибут
name
которых равен имени, атрибут
attr-count
 — количеству атрибутов, а атрибут
node-count
— количеству дочерних узлов соответствующего элемента.

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

<a b="1" c="2">

 <d e="3" f="4" g="5"/>

</a>

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

<xsl:stylesheet

 version="1.0"

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

 <xsl:output indent="yes"/>

 <xsl:attribute-set name="attrs">

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

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

</xsl:attribute>

 </xsl:attribute-set>

 <xsl:attribute-set name="elements">

<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>

 <xsl:template match="*">

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

Тайны затерянных звезд. Том 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