2013-03-04 78 views
1

我试图计算for循环中的记录数及其值(对于特定列)的总和。请找到下面的代码并给我建议。XSLT 2.0如何为每个组循环添加a的值

<xsl:for-each-group select="current-group()" group-by="CostCentre/PCCode"> 
       <!-- variables for each pc code --> 
       <xsl:variable name="chargeRate" select="SpaceTariffGroup/ChargeRate"/> 
       <xsl:variable name="dedicatedArea" 
        select="sum((current-group()[SpaceType/ChargeBackType = $chargeBackTypeDedicatedArea]/(Area*CalculationFactor)))"/>    

       <xsl:variable name="floorFactor" 
        select="$dedicatedArea div ($totalDedicatedAreaPerFloor)"/>`enter code here` 
       <xsl:variable name="floorCommonArea" 
        select="$floorFactor * $totalFloorCommonAreaPerFloor"/> 
       <xsl:variable name="dedicatedAndFloorCommonArea" 
        select="($dedicatedArea + $floorCommonArea)"/>      

       <xsl:variable name="totalChargedArea" 
        select="$dedicatedAndFloorCommonArea"/> 
       <xsl:variable name="totalChargedAmount" 
        select="$chargeRate * $totalChargedArea"/> 
<xsl:value-of select="$totalChargedArea"/> 
<xsl:text>,</xsl:text> 
<xsl:value-of select="$totalChargedAmount"/> 
enter code here 
</xsl:for-each-group> 

会打印这样的东西。 100,5000 200,5000 300,5000 400,5000

我想这样的输出中。 100,5000 200,5000 300,5000 400,5000 4,20000(这最后一排是总的记录,这些记录的值之和)不知道我怎样才能得到它

回答

2

那么你可以将for-each-group的结果存储在一个变量中,例如

<xsl:variable name="charges"> 
<xsl:for-each-group select="current-group()" group-by="CostCentre/PCCode"> 
       <!-- variables for each pc code --> 
       <xsl:variable name="chargeRate" select="SpaceTariffGroup/ChargeRate"/> 
       <xsl:variable name="dedicatedArea" 
        select="sum((current-group()[SpaceType/ChargeBackType = $chargeBackTypeDedicatedArea]/(Area*CalculationFactor)))"/>    

       <xsl:variable name="floorFactor" 
        select="$dedicatedArea div ($totalDedicatedAreaPerFloor)"/>`enter code here` 
       <xsl:variable name="floorCommonArea" 
        select="$floorFactor * $totalFloorCommonAreaPerFloor"/> 
       <xsl:variable name="dedicatedAndFloorCommonArea" 
        select="($dedicatedArea + $floorCommonArea)"/>      

       <xsl:variable name="totalChargedArea" 
        select="$dedicatedAndFloorCommonArea"/> 
       <xsl:variable name="totalChargedAmount" 
        select="$chargeRate * $totalChargedArea"/> 
<charge> 
    <area><xsl:value-of select="$totalChargedArea"/></area> 
    <amount><xsl:value-of select="$totalChargedAmount"/></amount> 
    </charge> 
</xsl:for-each-group> 
</xsl:variable> 

然后你可以用例如,

<xsl:for-each select="$charges/charge"> 
    <xsl:value-of select="concat(area, ',', amount)"/> 
</xsl:for-each> 

和输出与

<xsl:value-of select="sum($charges/charge/amount)"/> 
总和