2012-10-28 65 views
1

我一直在嘗試獲取不同節點中元素的總和(總計)值,但在示例之後的一個星期左右,我無法接近解決方案。XSLT SUM()未按預期工作

我所得到的是在字符串中列出的不同值,而不是總和。

用於獲取值的選擇是:

<xsl:for-each select="//workgroups/workgroup/agentstatus/status"> 
    <xsl:if test="key='Available, No ACD'"> 
    <xsl:value-of select="sum(value)"/> 
    </xsl:if> 
</xsl:for-each> 

這將返回111而不是預期值3

什麼我錯在這裏做什麼?

這是XML版本= 「1.0」 編碼= 'UTF-8'

回答

1

試試這個:

<xsl:value-of select="sum(//workgroups/workgroup/agentstatus/status[./key/text()='Available, No ACD']/value)" /> 

的循環的照顧的方式XSLT的作品,所以你不需要爲每個或一個if語句指定一個 - 它全部由xpath語句隱含。 如果這不起作用,請您可以發佈您正在運行的XML的副本,然後根據需要更新xpath。

+0

太棒了! 49秒內答案,它完全解決了我的掙扎! – NiteOwls

+1

不用擔心 - 如果您對理解上述代碼有任何疑問,請給我留言。 XSLT在您首次使用其他語言時很難找到您的頭腦,但在其中堅持編寫幾天,然後點擊一下,一切都變得輕鬆,您就會開始喜歡它。 – JohnLBevan

1

您的代碼選擇所有狀態元素,然後爲每一個具有所需的密鑰值時,輸出總和(值)。所以,彙總分別爲status分別運行xsl:if

你應該使用:

<xsl:value-of 
    select="sum(//workgroups/workgroup/agentstatus 
        /status[key/text()='Available, No ACD']/value)"/> 
+0

感謝您的回答,[./key/text()= – NiteOwls

+0

感謝您的回答,[./key/text()=和[/ key/text()= I 'm不確定,但會不會使用當前切除路徑中的位置,因爲/ key使用頂部路徑? – NiteOwls

+0

請注意,我從來沒有寫過'[/ key ...'這真的是從頂部開始,並且會提到一個假設文檔元素(唯一的根)。我寫了'[key'和JohnLBevan編寫了可互換的[。/ key]。這個。 node是上下文節點,它恰好與假定嵌套XPath的上下文相同,如從括號中開始的條件開始。 –