Технология 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
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 5
5. Фортуна дама переменчивая
Фантастика:
боевая фантастика
попаданцы
7.50
рейтинг книги
Ученичество. Книга 2
2. Государственный маг
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Адвокат вольного города 3
3. Адвокат
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Мымра!
1. Мымрики
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Пипец Котенку! 2
2. РОС: Пипец Котенку!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Инкарнатор
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Часовая битва
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Небо для Беса
3. Самбисты
Любовные романы:
современные любовные романы
5.25
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Пистоль и шпага
2. Штуцер и тесак
Фантастика:
альтернативная история
8.28
рейтинг книги
Дракон - не подарок
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Её (мой) ребенок
Любовные романы:
современные любовные романы
6.91
рейтинг книги
Не грози Дубровскому! Том III
3. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00