xsl转换以在遍历结束时对输出进行排序

时间:2013-10-10 19:48:20

标签: xslt

转换此

的实际最佳方式是什么?
<root>
  <data/>
  <data/>
</root>

进入这个:

<data1/>
<data1/>
<data2/>
<data2/>

不知怎的,xslt引擎的工作方式让我觉得它只能产生这个:

<data1/>
<data2/>
<data1/>
<data2/>

由这个简单的表格生成:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="data">
    <xsl:element name="data1"/>
    <xsl:element name="data2"/>
</xsl:template>
</xsl:stylesheet>

是否可以在转换结束时进行某种重新排序(不使用第二个应用程序)?

2 个答案:

答案 0 :(得分:1)

如果您只想添加类似示例样式表中的元素,但顺序不同,则可以这样做。

<xsl:template match="/">
  <!-- adding  data1 for every data tag-->
  <xsl:for-each select="//data" >
    <xsl:element name="data1"/>
  </xsl:for-each>
  <!-- adding  data2 for every data tag-->
  <xsl:for-each select="//data" >
    <xsl:element name="data2"/>
  </xsl:for-each>
</xsl:template>

答案 1 :(得分:1)

您必须使用两个单独的模板来创建data1data2元素。然后,您可以从与根节点匹配的模板中应用这些模板。在这种情况下,mode的{​​{1}}属性也很有用:

xsl:template