Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 是否可以从xslt中调用另一个xslt转换?_Xml_Xslt_Reverse - Fatal编程技术网

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从另一个样式表应用/调用模板。