2014-10-17 40 views
0

我想計算餘額客戶的總和。XSL轉換的數字總和

這是我的XML代碼:
<bank> <accounts> <deposit-accounts> <deposit-account id="d1" interesse="0.03"> <balance>2500</balance> </deposit-account> <deposit-account id="d2" interesse="0.03"> <balance>15075</balance> </deposit-account> </deposit-accounts> <bank-accounts> <bank-account id="c1"> <balance>4025</balance> </bank-account> <bank-account id="c2"> <balance>-125</balance> </bank-account> <bank-account id="c3"> <balance>325</balance> </bank-account> </bank-accounts> </accounts> <customers> <customer> <name>Ben Richerdson</name> <address>Park Drive 2</address> <accounts> <bank-account ref="c2" /> <deposit-account ref="d1" /> <bank-account ref="c1" /> </accounts> </customer> </customers> </bank> 這是我的XSL代碼: <xsl:for-each select="customer">
<xsl:for-each select="accounts/*"> <xsl:variable name="account" select="@ref" /> <xsl:for-each select="/bank/accounts/bank-accounts/bank-account"> <xsl:if test="@id = $account"> <xsl:value-of select="@id" /> <xsl:value-of select="balance" /> </xsl:if> </xsl:for-each> <xsl:for-each select="/bank/accounts/deposit-accounts/deposit-account"> <xsl:if test="@id = $account"> <xsl:value-of select="@id" /> <xsl:value-of select="balance" /> </xsl:if> </xsl:for-each> </xsl:for-each> </xsl:for-each>

最後,我想計算差額的整個客戶的賬戶。 在這種情況下,我希望客戶「Ben Richerdson」的結果爲-125 + 4025 + 2500 = 6400。 我嘗試使用sum函數,但結果是-12540252500(即字符串的連接) 您能幫助我嗎? 非常感謝

回答

0

定義鍵

<xsl:key name="ac" match="bank/accounts/deposit-accounts/deposit-account | bank/accounts/bank-accounts/bank-account" use="@id"/> 

,那麼你可以寫

<xsl:template match="customer"> 
    <xsl:value-of select="sum(key('ac', accounts/*/@ref)/balance)"/> 
</xsl:template> 

下面是一個完整的示例:

<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

<xsl:key name="ac" match="bank/accounts/deposit-accounts/deposit-account | bank/accounts/bank-accounts/bank-account" use="@id"/> 

<xsl:template match="/"> 
    <xsl:apply-templates select="//customer"/> 
</xsl:template> 

<xsl:template match="customer"> 
    Name: <xsl:value-of select="name"/>, sum:<xsl:value-of select="sum(key('ac', accounts/*/@ref)/balance)"/> 
</xsl:template> 

</xsl:stylesheet> 

當我運行與撒克遜6.5。 5針對您的輸入樣本,它輸出Name: Ben Richerdson, sum:6400

+0

謝謝,但存在一個更好或更簡單的解決方案? 因爲我從未使用。 謝謝 REGARDS – user3197655 2014-11-05 09:47:07