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

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

Жанры

Технология XSLT

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

Шрифт:

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

</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="выражение"/>

Использование элемента

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

□ Если результат вычисления имеет булевый, числовой или строковый тип, то

xsl:copy-of
выводит его в виде текстового узла. В этом случае поведение
xsl:copy-of
абсолютно не отличается от поведения элемента
xsl:value-of
.

□ Если результатом вычисления выражения является множество узлов (node-set), то

xsl:copy-of
копирует в выходящий документ все узлы в порядке просмотра документа вместе с их потомками.

□ Если результатом вычисления является результирующий фрагмент дерева, то он копируется в выходящий документ в неизмененном виде.

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

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

<values>

 <boolean>false</boolean>

 <string>text</string>

 <number>3.14</number>

 <node-set>

<item>10</item>

<item>20</item>

<item>30</item>

 </node-set>

 <tree>

text

<root>

text

<branch>

text

<leaf/>

<leaf/>

</branch>

<leaf/>

</root>

 </tree>

</values>

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

<xsl:stylesheet

 version="1.0"

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

 <xsl:template match="/">

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

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

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

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

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

Ученичество. Книга 2

Понарошку Евгений
2. Государственный маг
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ученичество. Книга 2

Адвокат вольного города 3

Кулабухов Тимофей
3. Адвокат
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Адвокат вольного города 3

Мымра!

Фад Диана
1. Мымрики
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Мымра!

Пипец Котенку! 2

Майерс Александр
2. РОС: Пипец Котенку!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Пипец Котенку! 2

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Небо для Беса

Рам Янка
3. Самбисты
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Небо для Беса

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Пистоль и шпага

Дроздов Анатолий Федорович
2. Штуцер и тесак
Фантастика:
альтернативная история
8.28
рейтинг книги
Пистоль и шпага

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Её (мой) ребенок

Рам Янка
Любовные романы:
современные любовные романы
6.91
рейтинг книги
Её (мой) ребенок

Не грози Дубровскому! Том III

Панарин Антон
3. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том III