我需要根据某个属性对值进行分组并填充它.
下面提到的是i/p xml,如果你看到有4行用户和id 2,4分是相同的,即HR
虽然产生实际的o/p我需要按分组分组......任何帮助???
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进行分组并填充ie
<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>
Lac*_*che 87
在XSLT 1.0中,使用Muenchian分组.
<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
<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>
使用
<xsl:for-each-group select="*" group-by="@Division"> 
....
</xsl:for-each-group>