XSLT数据透视表

时间:2009-10-05 21:42:46

标签: xml xslt pivot-table

我是新手使用XSLT并且正在尝试使用Muenchian方法创建一个数据透视表(因为看起来IE仍然不支持XSLT 2.0,我想我已经坚持了这一点)。我能够获得所需的分组但是我试图得到每个组的属性总和。要做属性的总和,我可以使用聚合求和函数,还是必须循环键并将值存储到变量中?这就是我到目前为止所做的:

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

<xsl:key name="Person" match="Record" use="@PersonID" />
<xsl:template match="/">
  <html>
  <body>
    <h2>Costs Per Person</h2>
    <table border = "1">
        <thead>
        <tr>
           <th>ID</th>
           <th>Cost</th>
        </tr>
        </thead>
        <tbody>
        <xsl:for-each select="Records/Record[generate-id() = 
         generate-id(key('Person', @PersonID)[1])]">
        <tr>
            <td>
                <xsl:value-of select="@PersonID" />
            </td>

            <td>
                <!-- Sum Of Cost -->
            </td>
        </tr>   
       </xsl:for-each>  
       </tbody>
    </table>
  </body>
  </html>
</xsl:template>

2 个答案:

答案 0 :(得分:1)

因为循环中的当前上下文节点是Record元素,所以您需要确保“sum”包含具有匹配PersonID属性的所有记录。这样的事情应该做:

<xsl:value-of select="sum(../Record[@PersonID=current()/@PersonID]/@Cost)" />

或者,因为您知道当前的Record元素是第一个具有特定PersonID属性的元素,所以在这种情况下您也可以这样做

<xsl:value-of select="number(@Cost) + sum(following-sibling::Record[@PersonID=current()/@PersonID]/@Cost)" />

答案 1 :(得分:0)

如果可以使用xpath选择所需记录的属性,则应该能够使用sum。

在不知道输入xml的结构的情况下,我不知道这会是什么,但我猜你的情况类似于<xsl:value-of select="sum(@cost)"/>