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-ofMDN (рус.)xsl:copy-ofMSDN (en)