XSLT - 在apply-template中对动态节点进行分组

时间:2016-01-07 13:42:35

标签: 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">ffff</aa>
    <aa type="yy">gggg</aa>
</doc>

在我的场景中,type属性是一个变量,我需要通过检查type属性有序地对上面的xml进行分组,类型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>

因为type属性值是一个变量(我不知道确切的类型值),我写了一个如下的模板,

<xsl:template match="doc">
    <doc>
        <xsl:apply-templates select="aa[@type='{@type}']"/>
    </doc>
</xsl:template>

使用group-by实现任务的方法会更容易,但我是否只能使用apply-template

执行此操作

1 个答案:

答案 0 :(得分:1)

我了解您希望以有序的方式在所有WordUtils.capitalizeFully节点上应用模板。您可以使用for-each执行此操作,这允许排序:

<aa>