この変換:
<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>
2番目の解決策 - より直接的で短い:
<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>
説明:
どちらのソリューションでも、要素ツリーのルートのコピーを回避し、そのサブツリーをコピーします。
最初の解決策では、サブツリーのコピーは同一性規則の効果です。これにより、将来計画を変更し、単にサブツリーのノードをコピーするだけでなく、それらの一部またはすべてを変換することを決定した場合でも、柔軟性が向上します。 .
2 番目のソリューションでは、コピーは 1 つの XSLT 命令で行われます -- <xsl:copy-of>
。ここでは、速度とコンパクトさのために柔軟性を犠牲にしています。