2013-05-17 57 views
0

我想增加一個計數器,當條件滿足時,例如,如果一個final_score超過30,count = 1,所以如果3分數超過30,final_score應該是3.要獲得分數我需要添加前的分數,從而最終得分是所有其他分數xsl增量計數器條件

例如計算

示例XML

<scores> 
    <score result="20" /> 
    <score result="10" /> 
    <score redult="5" /> 
</score> 

主要XSL

<xsl:call-template name="scores"> 
<xsl:with-param name="prev_count" select="0"/> 
</xsl:call-template> 

模板分數

<template name="scores"> 
<param name="counter" select="0"> 
<xsl:variable name="prev_counter" select="$counter+1" /> 

    <xsl:for-each select="persons/person[[email protected]]">//get all the scores 
    <xsl:varable name="total_score" select="sum(scores/score)" />//sum them all up 
    <xsl:if test="total_score > 40" > //check the result 
     <xsl:value-of select="$counter"> 
    <xsl:call-template name="scores"> 
     <xsl:with-param name="counter" select="$counter+1"/> 
    </xsl:call-template> 

    </xsl:if> 

    <xsl:for-each> 
    </xsl:template> 
</xsl:template> 

我只是不能工作了,或者是我的方法的路要走?

+1

你在這裏向我們展示了完整的XML嗎?您的XSLT包含對** person **元素的引用,這些元素不在您的XML中。它看起來像你試圖計數所有後代**得分**元素的總和大於30(或40)的數字** person **元素。那是對的嗎?謝謝! –

回答

2

如果我理解正確的,計算的元件的數量,其中總的的得分元素大於30,就用這個表達式(假設您目前位於父母元素)

<xsl:value-of select="count(person[sum(scores/score/@result) > 30])" /> 
+0

謝謝你,我最終不需要for循環,你的回答幫助我在走上錯誤的道路之後找出了這一點。謝謝。我最終在value-of中做了一個條件並刪除了for循環。所以它最終如你所說 – user1899802

+0

30 and id = @ id])」/> – user1899802