2014-10-17 3 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