2013-11-14 32 views
1

嗨, 我需要根據某些屬性將值分組兩次,然後填充它。在xslt中使用兩個group-by

的XML下面,我想一個組通過對UITVOERINGSNIVEAU和ENVELOPPE

<rows> 
    <row Enveloppe="ACOS" POST_NUM="1000" UITVOERINGSNIVEAU="BnComd" CSTAMNUMMER="1" /> 
    <row Enveloppe="ACOS" POST_NUM="5000" UITVOERINGSNIVEAU="BnComd" CSTAMNUMMER="2" /> 
    <row Enveloppe="DG" POST_NUM="1001" UITVOERINGSNIVEAU="BdeComd" CSTAMNUMMER="4" /> 
</rows> 

我想要的結果如下:

<rows> 
     <row> 
     <cell image="folder.gif">BnComd</cell> 
     <row> 
      <cell image="folder.gif">ACOS</cell> 
       <row> 
       <cell>1000</cell> 
       <cell>1</cell> 
       </row> 
       <row> 
       <cell>5000</cell> 
       <cell>2</cell> 
       <row> 
     </row> 
    </row> 
    <row> 
     <cell image="folder.gif">BdeComd</cell> 
      <row> 
      <cell image="folder.gif">DG</cell> 
       <row> 
       <cell>1001</cell> 
       <cell>4</cell> 
       </row> 
     </row> 
     </row> 
    </rows> 

我覺得這是由組上僅做了UITVOERINGSNIVEAU,但我不知道如何整合我的第二組 - 通過:

<xsl:template match="/*"> 
    <rows> 
    <xsl:for-each-group select="//rows/row" group-by="@UITVOERINGSNIVEAU"> 
     <row> 
     <cell image="folder.gif"><xsl:value-of select="current-grouping-key()"/></cell> 
     <xsl:apply-templates select="current-group()"/> 
     </row> 
    </xsl:for-each-group> 
    </rows> 
</xsl:template> 

<xsl:template match="row"> 
    <row> 
    <xsl:apply-templates select="@* except @UITVOERINGSNIVEAU"/> 
    </row> 
</xsl:template> 

<xsl:template match="row/@*"> 
    <cell><xsl:value-of select="."/></cell> 
</xsl:template> 

有人可以幫我認罪è?

感謝

回答

1

如果你想組第二次就可以做這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

    <xsl:template match="/*"> 
     <rows> 
      <xsl:for-each-group select="//rows/row" group-by="@UITVOERINGSNIVEAU"> 
       <row> 
        <cell image="folder.gif"> 
         <xsl:value-of select="current-grouping-key()"/> 
        </cell> 
        <xsl:for-each-group select="current-group()" group-by="@Enveloppe"> 
         <row> 
          <cell image="folder.gif"> 
           <xsl:value-of select="current-grouping-key()"/> 
          </cell> 
          <xsl:apply-templates select="current-group()"/> 
         </row> 
        </xsl:for-each-group> 
       </row> 
      </xsl:for-each-group> 
     </rows> 
    </xsl:template> 

    <xsl:template match="row"> 
     <row> 
      <xsl:apply-templates select="@* except (@UITVOERINGSNIVEAU | @Enveloppe)"/> 
     </row> 
    </xsl:template> 

    <xsl:template match="row/@*"> 
     <cell> 
      <xsl:value-of select="."/> 
     </cell> 
    </xsl:template> 
</xsl:stylesheet>