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
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
XSLT 3.0 also adds a new attribute
on-empty which works the same way as the