我看不出xsl:copy
和xsl:copy-of
之间有什么区别。
在什么情况下我应该使用哪一个?
简而言之,xsl:copy
是一个浅拷贝xsl:copy-of
是一个深度复制。
何时使用xsl:copy
与xsl:copy-of
- 如果只想复制上下文项,请使用
xsl:copy
对上下文项的子项有其他计划 - 如果要复制XPath选定的节点,请使用
xsl:copy-of
他们的孩子,递归地
xsl:copy的注意事项
-
xsl:copy
指令复制上下文项,但不复制的子节点 - 这是一个肤浅的复制品
-
xsl:copy
指令不能具有@select
XPath
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的注释
xsl:copy-of
指令在必需的@select
属性中评估XPath,并递归复制所选节点及其子节点- 这是一个深度复制
xsl:copy-of
指令必须具有@select
XPath
请注意,xsl:copy-of
本可以用于身份转换,但在递归过程中允许其他模板匹配所提供的灵活性将丢失。
xsl:copy
是一个浅拷贝。如果您只想复制当前节点(规范中的"上下文项"),请使用它。xsl:copy-of
是深度复制。如果要在当前节点下复制完整的节点树,请使用它。要获得更全面和完整的解释,请阅读第一条注释中链接到的规范。