【问题标题】:Sum of column based on <xsl:choose> statement基于 <xsl:choose> 语句的列总和
【发布时间】:2016-12-06 17:53:44
【问题描述】:

我在 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>

在列的底部,我想获取列中所有值的总和。有没有办法做到这一点?

提前致谢!

【问题讨论】:

    标签: xslt sharepoint-2010 xslt-1.0 dataviewwebpart


    【解决方案1】:

    您可以将输入预处理为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>
    

    【讨论】:

    • 无需预处理:只需将sum() 函数与谓词一起使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多