2010-08-30 37 views
0
<xsl:choose> 

      <xsl:when test="$cty='LOHNSTD'"> 
       <xsl:variable name="sum" select="$sum + $amt"/> 
      </xsl:when> 
      <xsl:when test="$cty='REGPAY'"> 
      <xsl:variable name="sum1"> 
       <xsl:value-of select="$sum1 + $amt"/> 
      </xsl:variable> 
      </xsl:when> 
     </xsl:choose> 

在上面的代碼中,它給了我警告消息說變量sum和sum1沒有聲明。 amt和cty是傳遞給此模板的參數。任何人都可以幫助我根據不同的類別代碼進行求和嗎?在選擇語句中在xslt中添加兩個變量

回答

0

如果你能活着,而無需兩個和變量我會做這樣的

<xsl:variable name="sum"> 
    <xsl:choose> 
    <xsl:when test="$cty='LOHNSTD'"> 
     <xsl:value-of select="$something + $amt"/> 
    </xsl:when> 
    <xsl:when test="$cty='REGPAY'"> 
     <xsl:value-of select="$something_else + $amt"/> 
    </xsl:when> 
    </xsl:choose> 
</xsl:variable> 

但是,如果主要的是增加取決於一些條件變量的值,你不能。變量已修復。

0

首先,您不能在choose構造中聲明變量並在其他地方使用它。沒有以下兄弟指令的變量是無用的。

在你的例子中,你有兩個問題,一個是上面提到的問題,你試圖在變量被聲明之前使用變量$sum$sum1(就像錯誤信息所示)。 Essensially,你正在嘗試使用你聲明的變量來計算總和。

我不確定你想要完成什麼,但是如果你給我們一些關於這個問題的更多信息,我相信我們可以幫助你更好地解決它。

2

如前所述,您的樣式表片段存在兩個問題:使用不明確的變量引用(xsl:variable name="sum" select="$sum + $amt"),並在xsl:when之外丟失變量作用域。

如果你想聲明一個變量的值在某些條件下有變化,那麼從Ledhund得到的答案是正確的選擇:在變量的內容模板中使用xsl:choose

而且,如果總和的條件是節點集,你可以使用這個表達式:

sum($A|$B[$cty='LOHNSTD']|$C[$cty='REGPAY']) 

或者

$A + $B[$cty='LOHNSTD'] + $C[$cty='REGPAY'] 

如果你正在嘗試的機會已經聲明的變量的值,那麼你應該重構你的轉換,因爲這在XSLT的任何聲明範例中都是不可行的。