如何在 xslt 元素上应用 group by [英] how to apply group by on xslt elements
本文介绍了如何在 xslt 元素上应用 group by的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要根据某个属性对值进行分组并填充它.
I need to group the value based on some attribute and populate it.
下面提到的是 i/p xml,如果你看到有 4 行用户和 id 2,4 部门是相同的,即 HR
below mentioned is i/p xml and if you see there are 4 rows for Users and for id 2,4 Division is same i.e. HR
在生成实际的 o/p 时,我需要按部门分组......任何帮助???
while generating actual o/p I need to group by Division ... Any help ???
I/P XML
<Users>
<User id="2" name="ABC" Division="HR"/>
<User id="3" name="xyz" Division="Admin"/>
<User id="4" name="LMN" Division="Payroll"/>
<User id="5" name="PQR" Division="HR"/>
</Users>
预期结果:我需要根据 Division 对值进行分组并填充,即
expected Result: I need to group the values based on Division and populate i.e.
<AllUsers>
<Division value="HR">
<User>
<id>2</id>
<name>ABC</name>
</User>
<User>
<id>5</id>
<name>PQR</name>
</User>
</Division>
<Division value="ADMIN">
<User>
<id>3</id>
<name>XYZ</name>
</User>
</Division>
<Division value="Payroll">
<User>
<id>4</id>
<name>LMN</name>
</User>
</Division>
</AllUsers>
推荐答案
在 XSLT 1.0 中,使用 Muenchian 分组.
In XSLT 1.0, using Muenchian grouping.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:key name="division" match="User" use="@Division" />
<xsl:template match="Users">
<AllUsers>
<xsl:apply-templates select="User[generate-id(.)=generate-id(key('division',@Division)[1])]"/>
</AllUsers>
</xsl:template>
<xsl:template match="User">
<Division value="{@Division}">
<xsl:for-each select="key('division', @Division)">
<User>
<id><xsl:value-of select="@id" /></id>
<name><xsl:value-of select="@name" /></name>
</User>
</xsl:for-each>
</Division>
</xsl:template>
</xsl:stylesheet>
在 XSLT 2.0 中,使用 xsl:foreach-group
In XSLT 2.0, use xsl:foreach-group
<xsl:output method="xml" indent="yes" />
<xsl:template match="Users">
<AllUsers>
<xsl:for-each-group select="User" group-by="@Division">
<Division value="{@Division}">
<xsl:for-each select="current-group()">
<User>
<id><xsl:value-of select="@id" /></id>
<name><xsl:value-of select="@name" /></name>
</User>
</xsl:for-each>
</Division>
</xsl:for-each-group>
</AllUsers>
</xsl:template>
这篇关于如何在 xslt 元素上应用 group by的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文