Xml XSLT-在应用模板中对动态节点进行分组
我有一个这样的xmlXml XSLT-在应用模板中对动态节点进行分组,xml,xslt,xslt-2.0,Xml,Xslt,Xslt 2.0,我有一个这样的xml <doc> <aa type="xx">aaaa</aa> <aa type="xx">bbbb</aa> <aa type="yy">ccccc</aa> <aa type="zz">dddd</aa> <aa type="yy">eeee</aa> <aa type="xx">ff
<doc>
<aa type="xx">aaaa</aa>
<aa type="xx">bbbb</aa>
<aa type="yy">ccccc</aa>
<aa type="zz">dddd</aa>
<aa type="yy">eeee</aa>
<aa type="xx">ffff</aa>
<aa type="yy">gggg</aa>
</doc>
aaaa
bbbb
ccccc
dddd
eeee
ffff
gggg
在我的场景中,type属性是一个变量,我需要通过检查type属性将上述xml按顺序分组,type attr值应该优先显示在top中,因此输出应该是
<doc>
<aa type="xx">aaaa</aa>
<aa type="xx">bbbb</aa>
<aa type="xx">ffff</aa>
<aa type="yy">ccccc</aa>
<aa type="yy">eeee</aa>
<aa type="yy">gggg</aa>
<aa type="zz">dddd</aa>
</doc>
aaaa
bbbb
ffff
ccccc
eeee
gggg
dddd
因为type属性值是一个变量(我不知道确切的类型值),所以我编写了一个模板,如下所示:
<xsl:template match="doc">
<doc>
<xsl:apply-templates select="aa[@type='{@type}']"/>
</doc>
</xsl:template>
使用
groupby
可以更容易地实现执行任务的方法,但我只能使用apply template
来执行此操作。我知道您希望以有序的方式在所有
节点上应用模板。您可以使用for each执行此操作,这允许排序:
<xsl:template match="doc">
<doc>
<xsl:for-each select="aa">
<xsl:sort select="@type"/>
<xsl:apply-templates select="."/>
</xsl:for-each>
</doc>
</xsl:template>
xsl:sort
也适用于xsl:apply模板
,因此您可以将其简化为