我是新手使用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>
答案 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)"/>