Вход/Регистрация
Технология XSLT
вернуться

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

Шрифт:

Элемент

xsl:attribute
также не может использоваться для генерации объявлений пространств имен. В соответствии с технической рекомендацией XSLT,
xsl:attribute
не может создавать атрибуты, имена которых имеют префикс
xmlns
.

Если атрибут создается в элементе, который уже имеет атрибут с таким же именем, старый атрибут будет переопределен новым значением.

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

Листинг 7.6. Фрагмент шаблона

<а href="#">

 <xsl:attribute name="href">

<xsl:text>http://www.bbb.com</xsl:text>

 </xsl:attribute>

</a>

Листинг 7.7. Результат

<a href="#"/>

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

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

Текстовое значение атрибута может задаваться не только символьными данными, Оно может генерироваться также элементами 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
.

  • Читать дальше
  • 1
  • ...
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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