xslt中的sum xml属性不起作用

xslt中的sum xml属性不起作用,xml,xslt,Xml,Xslt,我想通过在xslt中使用sum函数从data/assets/details添加amount属性。我按照下面的方式做了,这会导致类型转换错误 <data> <assets> <details amount="100"/> <details amount="50"/> <details amount="30"/> </assets> </data> 请

我想通过在xslt中使用sum函数从data/assets/details添加amount属性。我按照下面的方式做了,这会导致类型转换错误

<data>
    <assets>
        <details amount="100"/>
        <details amount="50"/>
        <details amount="30"/>
    </assets>
</data>

请尝试以下XSLT以获得结果:

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

您修改后的信息表明您的金额值的格式为123456.78。这不是自动字符串到数字转换可以处理的格式

所以需要进行转换,然后对转换后的值求和。这在XSLT 2.0中非常简单:

<?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>

在XSLT1.0中要困难得多;唯一干净的解决方案是递归模板,它依次转换和添加每个值。

表达式似乎正确,除非您使用的是支持模式的XPath 2.0处理器,并且amount属性具有非数字数据类型(例如xs:string)。你需要告诉我们更多关于你是如何运行它的,以及准确的错误消息。如果我有一个问题,那么解决方案应该是什么,因为我猜属性值是字符串。感谢Michael的解决方案,它对我的数据起到了作用。。。还有很多东西需要学习,传统的做法是将答案标记为已被接受。有些人关心的是如何获得布朗尼分数(我不在乎),但更重要的是,这是对其他人的一个信号,他们在未来几年里会找到问题和答案。我想我需要至少15个声誉来标记你的回答是否被接受,到目前为止,我是不允许这样做的。如果您有其他方法让我接受您的回答,那么我很乐意这样做。@ParaJump-您可以通过单击旁边的复选标记来接受答案。如果你问了这个问题,不需要任何名声就能将答案标记为被接受。看一看。如果你能回顾一下你问过的和其他人回答过的老问题,看看是否有人能接受,那也太好了。
sum(/data/assets/details/@amount/number(translate(., ',', ''))