xsl:copy-of
Copies the value obtained by evaluating the mandatory select
attribute. It makes an exact copy.
Category: instruction
Content: none
Permitted parent elements:
any XSLT element whose content model is
sequence-constructor; any literal result element
Attributes
|
| Value to be copied (which may be any sequence of nodes, atomic values, and/or function items), given by an expression. If this expression is a string, a number, or a boolean, the effect is the same as using xsl:sequence. |
|
| New in XSLT 3.0. Used to copy the pre-descent and post-descent values of accumulators on source nodes to the new copies. |
|
| Controls whether the in-scope
namespaces of any element nodes copied by this instruction are automatically
copied to the result. The default is |
|
| Requests validation of the copied node against a specified XSD type. The value will typically be a user-defined complex type defined in an imported schema. |
|
| Requests strict or lax validation of the contents of the document against the element declaration of its top-level element; or requests that type annotations present on the source node should be retained in the result. |
Saxon availability
Available in XSLT 1.0 and later versions. Available in all Saxon editions. Available for all platforms.
Notes on the Saxon implementation
Earlier releases of Saxon supported an attribute saxon:read-once
to control
streaming behaviour. This is now superseded by the streaming features of XSLT 3.0;
an error is reported if the attribute is used.
Details
Making a deep copy of an element is particularly useful during streaming. For
this reason XSLT 3.0 introduces an equivalent function, copy-of(). For example one can write
<xsl:for-each select="employee/copy-of()">
which
processes a sequence of copies of the selected <employee>
elements; the significance of using copies is that streaming constraints do not
apply, since each <employee>
element will be represented as a
tree in memory, discarded as soon as that element has been processed.