如何在xslt

时间:2015-12-11 10:15:12

标签: xml xslt

我有这样的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不同。

1 个答案:

答案 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