Xslt 在遍历结束时对输出进行排序的xsl转换
改变这种状况的最佳方式是什么Xslt 在遍历结束时对输出进行排序的xsl转换,xslt,Xslt,改变这种状况的最佳方式是什么 <root> <data/> <data/> </root> 为此: <data1/> <data1/> <data2/> <data2/> xslt引擎的工作方式让我认为它只能产生以下结果: <data1/> <data2/> <data1/> <data2/> 这是由这个简单的表生成的: <
<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>
是否可以在转换结束时进行某种形式的重新排序(无需使用第二个应用程序)?如果您只想添加示例样式表中的元素,但顺序不同,您可以这样做
<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>
必须使用两个单独的模板来创建
data1
和data2
元素。然后,您可以从与根节点匹配的模板应用这些模板,例如。xsl:template
的mode
属性在这种情况下也很有用:
<xsl:template match="/">
<xsl:apply-templates select="//data" mode="data1"/>
<xsl:apply-templates select="//data" mode="data2"/>
</xsl:template>
<xsl:template match="data" mode="data1">
<xsl:element name="data1"/>
</xsl:template>
<xsl:template match="data" mode="data2">
<xsl:element name="data2"/>
</xsl:template>
好的,我知道了,谢谢。尽管我更喜欢nwellnhof给出的递归方法。