我不明白 xsl:copy
和 xsl:copy-of
之间的区别。
在什么情况下应该使用哪一个?
简而言之,xsl:copy
是浅拷贝;xsl:copy-of
是深拷贝。
xsl:copy
vs xsl:copy-of
xsl:copy
。 xsl:copy-of
。xsl:copy
的一个非常常见的用途可以在身份转换中找到。
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
请注意,在此处使用 xsl:copy
元素复制节点本身,然后通过 xsl:apply-templates
转换其子节点,这样其他模板就有机会在转换过程中进行干预。
xsl:copy-of
指令对其必需的 @select
属性中的 XPath 进行评估,并递归地复制所选节点及其子节点。xsl:copy-of
指令必须具有 @select
XPath。请注意,xsl:copy-of
可以在标识转换中使用,但是允许其他模板在递归期间匹配提供了更大的灵活性。
xsl:copy
是一种浅复制。如果您只想复制当前节点(规范中的“上下文项目”),请使用它。
xsl:copy-of
是一种深复制。如果您想要复制当前节点下的完整节点树,请使用它。有关更详细和完整的解释,请阅读从第一个评论中链接到的规范。