2016-12-06 9 views
0

に基づいて、私は次のように計算されている列とSharePoint 2010のデータビューでテーブルがあります。私は、合計を取得したいと思い、カラムの底部では合計<xsl:choose>声明

<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

入力を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> 
+0

なしプレ処理が必要です:単に*述語*で 'sum()'関数を使用してください。 –