XSLT中的汇总汇总

时间:2020-10-21 15:33:06

标签: html xml xslt xslt-2.0

说我们有如下数据:

<ROW>
  <CAT_CODE>3 COE</CAT_CODE>
  <ACCT_2>4400</ACCT_2>
  <ACCT2_DESC>Employee Costs</ACCT2_DESC>
  <ACCT_3>4490</ACCT_3>
  <ACCT3_DESC>Salaries</ACCT3_DESC>
  <ACTUAL>55.30</ACTUAL>
</ROW>

我们想按“ ACCT_2”和CAT_CODE ='3 COE'对所有内容进行分组,并创建一个如下表:

+-----------------+----------+--------+
| Account Level 2 | Category | Actual |
+-----------------+----------+--------+
| 4400            | 3 COE    | 4,609  |
+-----------------+----------+--------+
| 4500            | 3 COE    | 9,870  |
+-----------------+----------+--------+
| 4600            | 3 COE    | 1,343  |
+-----------------+----------+--------+
 . . . 
+-----------------+----------+--------+
| Total:          |          | 23,998 |
+-----------------+----------+--------+

如何实现这样的目标?我们有以下代码:

   <table>
     <tr>
       <td>Account Level 2</td>
       <td>Category</td>
       <td>Actual</td>
     </tr>
     <xsl:for-each-group select="ROW[CAT_CODE='3 COE']" group-by="ACCT_3">
       <tr>
         <td><xsl:value-of select="ACCT_3"/></td>
         <td><xsl:value-of select="CAT_CODE"/></td>
         <td><xsl:value-of select="format-number(sum(ACTUAL), '#,###')"/></td>
       </tr>
     </xsl:for-each-group>
     <tr>
       <td>Total: </td>
       <td></td>
       <td><xsl:value-of select="format-number(sum(ROW[CAT_CODE='3 COE']/ACTUAL), '###,###')"/></td>
     </tr>
   </table>

但是看来我们遗漏了一些价值观。我们最终得到了正确的“总计”行,但上方的行未总计。

注意:请原谅我的无知,因为我是XML / XSL的新手。我今天才开始学习。

1 个答案:

答案 0 :(得分:2)

您的求和表达式应为:

<xsl:value-of select="format-number(sum(current-group()/ACTUAL), '#,###')"/>

以求和当前组的所有成员。您现有的代码仅求和上下文节点的ACTUAL子元素-对于for-each-group是该组的第一个成员。