2013-07-18 64 views
0
<data> 
    <assets> 
     <details amount="100"/> 
     <details amount="50"/> 
     <details amount="30"/> 
    </assets> 
</data> 

我想通過內部XSLT和功能添加從數據/資產/細節量屬性。我在做下面的方式賦予類型轉換錯誤和XML屬性不工作

<xsl:value-of select="sum(/data/assets/details/@amount)"/> 
+3

您的表達式看起來是正確的,可能除非您使用的是模式感知XPath 2.0處理器,並且amount屬性具有非數字數據類型(例如xs:string)。你需要告訴我們更多關於你如何運行它以及準確的錯誤信息。 –

+0

如果我有一個

那麼應該是什麼解決方案,因爲我猜屬性值是字符串。 – ShresthaR

回答

0

請嘗試以下XSLT的結果:

<?xml version='1.0'?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="assets"> 
<xsl:value-of select="details[1]/@amount + details[2]/@amount + details[3]/@amount"/> 
</xsl:template> 
</xsl:stylesheet> 
2

你修改過的信息表明您的格式爲123,456.78量的值。這不是自動字符串到數字轉換可以處理的格式。

所以你需要做一個轉換,然後你需要總結轉換後的值。這是在XSLT 2.0非常簡單:

sum(/data/assets/details/@amount/number(translate(., ',', '')) 

這是在XSLT 1.0困難得多;唯一干淨的解決方案是遞歸模板,依次轉換和添加每個值。

+0

感謝Michael爲您提供的解決方案,它爲我的數據工作......還有很多東西要學習 – ShresthaR

+0

約定是將答案標記爲已接受。有些人關心賺取布朗尼點數(我不知道),但更重要的是,這是其他人在未來幾年內發現問題和答案的信號。 –

+0

我認爲我需要至少15個聲望才能將您的回覆標記爲已接受,至今我不允許這樣做。如果您有任何其他方式讓您的回覆被我接受,那麼我很樂意這樣做。 – ShresthaR