我在Sharepoint 2010数据视图中有一个表,其列的计算方法如下:
<td>
<xsl:variable name="CurrentYear" select="ddwrt:FormatDateTime(string(ddwrt:Today()),1033,'yyyy')"/>
<xsl:variable name="YearOfWork" select="$thisNode/@Year"/>
<xsl:choose>
<xsl:when test="number($YearOfWork) = number($CurrentYear) - 1">
<xsl:value-of select="number(@_x004a_an116)"/>
</xsl:when>
<xsl:when test="number($YearOfWork) + 1 = number($CurrentYear) - 1">
<xsl:value-of select="number(@_x004a_an1)"/>
</xsl:when>
<xsl:when test="number($YearOfWork) + 2 = number($CurrentYear) - 1">
<xsl:value-of select="number(@_x004a_an1)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="number(0.00)"/>
</xsl:otherwise>
</xsl:choose>
</td>
在列的底部,我想获得列中所有值的总和。有没有办法做到这一点?
提前致谢!
答案 0 :(得分:0)
您可以将输入预处理为node-set
并对其应用多个变换。这确实需要扩展,但它可以广泛使用。
我以此输入为例:
<vals>
<val Year="2016" _x004a_an116="100" _x004a_an1="150"/>
<val Year="2015" _x004a_an116="200" _x004a_an1="250"/>
<val Year="2014" _x004a_an116="300" _x004a_an1="350"/>
<val Year="2013" _x004a_an116="400" _x004a_an1="450"/>
<val Year="2012" _x004a_an116="500" _x004a_an1="550"/>
</vals>
然后将此样式表预处理到$vals
变量中,然后输出行和最终总数:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
exclude-result-prefixes="exsl">
<xsl:output indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/vals">
<xsl:variable name="CurrentYear" select="2016"/>
<xsl:variable name="vals">
<xsl:for-each select="val">
<tr>
<td><xsl:value-of select="@Year"/></td>
<td>
<xsl:variable name="YearOfWork" select="number(@Year)"/>
<xsl:choose>
<xsl:when test="$YearOfWork = $CurrentYear - 1">
<xsl:value-of select="@_x004a_an116"/>
</xsl:when>
<xsl:when test="$YearOfWork + 1 = $CurrentYear - 1">
<xsl:value-of select="@_x004a_an1"/>
</xsl:when>
<xsl:when test="$YearOfWork + 2 = $CurrentYear - 1">
<xsl:value-of select="@_x004a_an1"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0.00"/>
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
</xsl:variable>
<table>
<xsl:copy-of select="$vals"/>
<xsl:call-template name="sum">
<xsl:with-param name="rows" select="exsl:node-set($vals)"/>
</xsl:call-template>
</table>
</xsl:template>
<xsl:template name="sum">
<xsl:param name="rows"/>
<tr>
<td>Total</td><td><xsl:value-of select="sum($rows/tr/td)"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>