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

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

Шрифт:

 <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
выводит в выходящее дерево строковый результат вычисления выражений.

Элемент xsl:text

Синтаксис данного элемента представлен ниже:

<xsl:text

 disable-output-escaping="yes" | "no">

 <!-- Содержимое: символьные данные -->

</xsl:text>

Элемент

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

□ Преобразования будут сохранять пробельные символы, находящиеся в элементе

xsl:text
. То есть, для того чтобы вывести в выходящий документ пробельный символ, например такой, как символ перевода строки, достаточно написать

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

□ Элемент

xsl:text
имеет атрибут
disable-output-escaping
, который позволяет избежать замены в выходящем документе специальных символов на символьные или встроенные сущности. Например, для того, чтобы вывести символ "
<
" можно указать в преобразовании

<xsl:text disable-output-escaping="yes">&lt;</xsl:text>

В остальных случаях символьные данные, включенные в элемент

xsl:text
, ведут себя так же, как и вне
xsl:text
.

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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