这种转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="planet">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
当所提供的XML文档应用:
<planet>
<venus> sometext
<mass>123</mass>
</venus>
<mars>text about mars</mars>
</planet>
产生想要的,正确的结果:
<venus> sometext
<mass>123</mass>
</venus>
<mars>text about mars</mars>
的第二溶液 - 更直接短:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<xsl:copy-of select="node()"/>
</xsl:template>
</xsl:stylesheet>
说明:
在两种方案中,我们避免了元素树的根的复制,并复制其子树。
在第一解决方案的子树的复制是的identity rule的效果 - 这给了我们更多的灵活性,如果在未来改变我们的计划,并决定不是单纯的节点复制子树,但改造的他们中的一些或全部。
在第二种解决方案中,使用单个XSLT指令完成复制 - <xsl:copy-of>
。我们在这里交易灵活性,以提高速度和紧凑性
请注意,它自己的输出不是有效的XML文档。 – Eric