我问了一个问题XSLT: how to reverse the tree?并得到了解答。
现在我有transform1.xsl
生成一些XML输出。我想颠倒transform1.xsl
中reverse.xsl
的输出。我不想更改transform1.xsl
的功能,因为它在别处使用。
是否可以从transform1.xsl
内拨打reverse.xsl
,然后撤消其输出?
我尝试了以下reverse.xsl
的代码,但它只反转了未触及的节点:
<xsl:include href="transform1.xsl" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates select="node()">
<xsl:sort select="position()" data-type="number" order="descending" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
我准备了一个简化的例子。 输入XML文件:
<root>
<child1/>
<child2/>
</root>
`transform1.xsl&#39;,我不想改变:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="child2" >
<xsl:copy-of select="." />
<child3>
<grandchild1 />
<grandchild2 />
</child3>
</xsl:template>
</xsl:stylesheet>
reverse.xml的预期输出:
<root>
<child3>
<grandchild2 />
<grandchild1 />
</child3>
<child2 />
<child1 />
</root>