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

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

Шрифт:

 <xsl:text>href="#" type="text/xsl"</xsl:text>

</xsl:processing-instruction>

Результирующий документ будет содержать инструкцию по обработке в виде:

<?xml-stylesheet href="#" type="text/xsl"?>

Элемент

xsl:processing-instruction
не может создать декларацию XML, несмотря на то, что с точки зрения синтаксиса (но не семантики) она имеет форму инструкции по обработке. Для вывода XML-декларации следует использовать элемент
xsl:output
.

Копирование узлов

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

xsl:copy
и
xsl:copy-of
, использование которых будет подробно разобрано ниже.

Элемент xsl:copy

Ниже представлена синтаксическая конструкция этого элемента:

<xsl:copy

 use-attribute-sets = "наборы атрибутов">

 <!-- Содержимое: шаблон -->

</xsl:copy>

Элемент

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

Если

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

Пример

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

element-count
со значением, равным количеству его дочерних элементов, а все остальные узлы оставить, как есть.

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

<а> text

 <b attr="value"/>

 <c/>

 <d>

text

<e/>

 </d>

</a>

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

<xsl:template match="@*|node">

 <xsl:copy>

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

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

</xsl:attribute>

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

 </xsl:copy>

</xsl:template>

Листинг 7.19. Выходящий элемент

<a element-count="3">

 text

 <b element-count="0" attr="value"/>

 <c element-count="0"/>

 <d element-count="1">

text

<e element-count="0"/>

 </d>

</a>

Если

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

Пример

Предыдущее преобразование может быть переписано в виде

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

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

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

 </xsl:attribute>

</xsl:attribute-set>

<xsl:template match="@*|node">

 <xsl:copy use-attribute-sets="elements">

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

 </xsl:copy>

</xsl:template>

Результат преобразования будет абсолютно идентичен выходящему документу, полученному в предыдущем примере.

Элемент xsl:copy-of

Синтаксис элемента несложен:

<xsl:copy-of

 select="выражение"/>

  • Читать дальше
  • 1
  • ...
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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