XSLT - 在应用模板中对动态节点进行分组
XSLT - Grouping dynamic nodes within apply-template
我有一个这样的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按顺序分组,出现在top的type attr值应该优先,所以输出应该是
<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属性值是一个变量(我不知道确切的type值),我写了一个模板如下,
<xsl:template match="doc">
<doc>
<xsl:apply-templates select="aa[@type='{@type}']"/>
</doc>
</xsl:template>
使用 group-by
实现一个方法来完成任务会更容易,但我可以只使用 apply-template
我了解到您想以有序的方式在所有 <aa>
节点上应用模板。您可以使用 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>
我有一个这样的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按顺序分组,出现在top的type attr值应该优先,所以输出应该是
<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属性值是一个变量(我不知道确切的type值),我写了一个模板如下,
<xsl:template match="doc">
<doc>
<xsl:apply-templates select="aa[@type='{@type}']"/>
</doc>
</xsl:template>
使用 group-by
实现一个方法来完成任务会更容易,但我可以只使用 apply-template
我了解到您想以有序的方式在所有 <aa>
节点上应用模板。您可以使用 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>