xsl:copy-of¶
Использование элемента xsl:copy-of
полностью аналогично использованию элемента xsl:value-of
за тем исключением, что xsl:copy-of
при выводе значения выражения преобразует его к строке не во всех случаях.
Синтаксис¶
1 |
|
Атрибуты:
select
- обязательный атрибут, выражение вычисляет набор копируемых узлов.
Описание и примеры¶
Поведение xsl:copy-of
зависит от того, какой тип данных возвращает выражение.
- Если результат вычисления имеет булевый, числовой или строковый тип, то
xsl:copy-of
выводит его в виде текстового узла. В этом случае поведениеxsl:copy-of
абсолютно не отличается от поведения элементаxsl:value-of
. - Если результатом вычисления выражения является множество узлов
(node-set)
, тоxsl:copy-of
копирует в выходящий документ все узлы в порядке просмотра документа вместе с их потомками. - Если результатом вычисления является результирующий фрагмент дерева, то он копируется в выходящий документ в неизмененном виде.
Пример¶
Рассмотрим пример.
Листинг 7.20. Входящий документ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Листинг 7.21. Преобразование
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
|
Листинг 7.22. Выходящий документ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Учтите, что в XSLT 1.0 и 2.0 поведение этого элемента различно:
Для XSLT 1.0:
- Если атрибут
select
определяет фрагмент дерева результата, то весь фрагмент копируется в дерево результата. - Если атрибут
select
определяет набор узлов, то все узлы набора копируются в дерево результата в порядке документа. В отличие от<xsl:copy>
, узел копируется полностью – со всеми узлами пространств имен, атрибутов и дочерними узлами. - Если атрибут
select
определяет нечто отличное от фрагмента дерева результата или набора узлов, это «нечто» преобразуется в строку и вставляется в дерево результата.
Для XSLT 2.0:
- Если атрибут
select
определяет элемент, то этот элемент со всеми потомками и атрибутами копируется в выходной документ. По умолчанию узлы пространства имен элемента тоже копируются, хотя это поведение можно изменить при помощи атрибутаcopy-namespaces
. - Если атрибут
select
указывает на узел документа, этот узел документа со всеми потомками копируется в выходной документ. - Все остальные типы узлов (узлы атрибутов, пространств имен, текста, комментариев и инструкций по обработке) копируются в выходной документ.
- Атомарные значения присоединяются к итоговой последовательности.
См. также¶
Ссылки¶
xsl:copy-of
MDN (рус.)xsl:copy-of
MSDN (en)