Xml 是否可以从xslt中调用另一个xslt转换?
我问了一个问题,得到了回答 现在我有了Xml 是否可以从xslt中调用另一个xslt转换?,xml,xslt,reverse,Xml,Xslt,Reverse,我问了一个问题,得到了回答 现在我有了transform1.xsl,它生成了一些XML输出。我想在reverse.xsl中反转transform1.xsl的输出。我不喜欢更改transform1.xsl的功能,因为它在其他地方使用 是否可以从reverse.xsl中调用transform1.xsl,然后反转它的输出 我尝试了reverse.xsl的以下代码,但它只反转了未触及的节点: <xsl:include href="transform1.xsl" /> <xsl
transform1.xsl
,它生成了一些XML输出。我想在reverse.xsl
中反转transform1.xsl
的输出。我不喜欢更改transform1.xsl
的功能,因为它在其他地方使用
是否可以从reverse.xsl
中调用transform1.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',我不想更改它:
<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>
我想我不明白。你想倒转一棵树两次?我也不明白你的问题。在XSLT1.0中,转换只能有一个输出(除非处理器支持扩展)。@MathiasMüller,不,我想反转一次xsl`是另一个转换,而不是反向转换。那么,为什么不进行两个完全独立的转换呢?首先使用transform1.xsl
转换原始源XML,然后使用reverse.XML
转换中间输出?仍然很难理解您所追求的是什么。样式表不能调用其他样式表来预处理输入或后处理输出。但是,您可以使用xsl:import和xsl:include从另一个样式表应用/调用模板。