xsl:copy
The xsl:copy
element causes the current XML node in the source document to be copied to the
output. The actual effect depends on whether the node is an element, an attribute, or a text node.
For an element, the start and end element tags are copied; the attributes, character content and child elements
are copied only if xsl:apply-templates
is used within xsl:copy
.
Attributes of the generated element can be defined by reference to a named attribute set. The optional use-attribute-sets attribute contains a white-space-separated list of attribute set names. They are applied in the order given: if the same attribute is generated more than once, the later value always takes precedence.
The following example is a template that copies the input element to the output, together with all its child elements, character content, and attributes:
<xsl:template match="*|text()|@*"> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template>In XSLT 3.0, a new select
attribute is added to xsl:copy
, allowing a node
other than the context node to be copied. This is useful when the instruction appears inside xsl:function
.
XSLT 3.0 also adds a new attribute on-empty
which works the same way as the on-empty
attribute of xsl:element
.