Элемент <xsl:copy-of>
Вставляет в результирующее дерево поддеревья и фрагменты результирующего дерева.
<xsl:copy-of
select = Expression />
Атрибуты
- select
Обязательный. Выражение XPath Выражения (XSLT), задающее узлы для копирования. Поддерево под каждым из этих узлов копируется в результирующее дерево целиком.
Сведения об элементе
Количество вхождений |
Без ограничений |
Родительские элементы |
xsl:attribute, xsl:comment, xsl:copy, xsl:element, xsl:fallback, xsl:for-each, xsl:if, xsl:message, xsl:otherwise, xsl:param, xsl:processing-instruction, xsl:template, xsl:variable, xsl:when, xsl:with-param, элементы вывода |
Дочерние элементы |
(Нет дочерних элементов) |
Заметки
Если результат оценки выражения является результирующим фрагментом дерева, то в результирующее дерево копируется полный фрагмент. Если результатом является набор узлов, то все узлы набора копируются в резултирующее дерево в порядке их следования в документе. При копировании узла элемента, копируются узлы атрибутов, узлы пространств имен, потомки узла элемента, а также а также сам узел элемента. Корневой узел копируется благодаря копированию его потомков. Если результат не является ни набором узлов, ни фрагментом результирующего дерева, то результат преобразуется в строку, а затем вставляется в результирующее дерево, как и в случае с <xsl:value-of>.
Пример
Образец XSLT-файла обращается к образцу XML-файла для поиска элемента <person> в дочерних элементах <given-name> и <family-name>. Абзац будет содержать первый дочерний элемент <given-name> текущего узла, включая любые атрибуты и дочерние элементы, за которыми будет следовать пробел и первый дочерний элемент <family-name>, включая любые атрибуты и дочерние элементы текущего узла.
XML-файл (family.xml)
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="family.xsl"?>
<family>
<person>
<given-name age="10">
<name>Fred</name>
<nick-name>Freddy</nick-name>
</given-name>
<family-name>Smith</family-name>
</person>
<person>
<given-name age="10">
<name>Robert</name>
<nick-name>Bob</nick-name>
</given-name>
<family-name>Smith</family-name>
</person>
</family>
XSLT-файл (family.xsl)
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:template match="person">
<p>
<xsl:copy-of select="given-name"/>
<xsl:text> </xsl:text>
<xsl:copy-of select="family-name"/>
</p>
</xsl:template>
</xsl:stylesheet>
Вывод
Далее приведен форматированный вывод.
Fred Freddy Smith
Robert Bob Smith
Далее приведен вывод обработчика. Переводы строк добавлены для наглядности.
<?xml version="1.0"?>
<p><given-name age="10">
<name>Fred</name>
<nick-name>Freddy</nick-name>
</given-name>
<family-name>Smith</family-name></p>
<p><given-name age="10">
<name>Robert</name>
<nick-name>Bob</nick-name>
</given-name>
<family-name>Smith</family-name></p>