我有这样的xslt:
<Node>
<xsl:for-each select="A">
<item>
//some operations
</item>
</xsl:for-each>
<xsl:for-each select="B">
<item>
<Number></Number>
</item>
</xsl:for-each>
<item>
<SumOfNumberOfB></SumOfNumberOfB>
</item>
</Node>
我需要将xslt节点Number
中的所有数字相加并在SumOfNumberOfB
中显示它们。我无法从我使用的xml中获取它,因为舍入存在问题。所以它需要在xslt中。
修改
所以在xml中我的数字像12.3267这样的B,小数点分隔符后有4位数。在数字中,数字必须四舍五入为12.32。对于SumOfNumberOfB也是如此,如果我写了sum(// B / Number),之后我将它舍入为2,在某些情况下总和有差异。
和: 12.1237 + 12.1568 = 24.2805 - &gt;四舍五入后24.28
B中的四舍五入: 12.12 + 12.15 = 24.27
24.28与24.27不同。
答案 0 :(得分:1)
如果要舍入每个数字,然后形成舍入数字的总和,那么在XPath 3.0中,这可以表示为
sum($numbers ! round(., 2))
即,将round()函数应用于$ numbers中的每个值,然后将sum()函数应用于结果。
在XPath 2.0中,“!”运算符不可用,并且没有带有两个参数的round()函数,因此它变得更加冗长:
sum(for $n in $numbers return round-half-to-even($n, 2))
在XPath 1.0中,它变得更加困难,因为没有“数字序列”这样的数据类型;你唯一可以概括的是节点集,因为你不能在XPath中创建新节点并处理它们,甚至在XSLT 1.0中,它也会成为问题。您将在此处找到XSLT 1.0的可能方法概述:Using sum() function for string nodes in XSLT