4
我可以使用SUM(xpath)对所有节点值进行求和,但是我也有要求将所有正节点值,所有负节点值和所有节点值求和他们作为绝对值。这是可能的XSLT?XSLT,将所有负节点和所有节点求和为绝对值
我可以使用SUM(xpath)对所有节点值进行求和,但是我也有要求将所有正节点值,所有负节点值和所有节点值求和他们作为绝对值。这是可能的XSLT?XSLT,将所有负节点和所有节点求和为绝对值
总之一切积极节点值,你可以这样做:
<xsl:value-of select="sum(//*[. > 0])" />
总之所有的负节点的值,你可以这样做:
<xsl:value-of select="sum(//*[. < 0])" />
综上所述数字的绝对值,你可以这样做:
<xsl:value-of select="sum(//*[. > 0]) - sum(//*[. < 0])" />
错误列表。 sum( - // x)在XSLT 2.0中给出类型错误,因为一元减号只能应用于单例;在XSLT 1.0中,它忽略了除节点集中的第一个节点之外的所有节点,这会破坏目的。 – 2012-01-13 22:19:22
感谢您的提醒,它在我使用的在线测试工作,但负数可能是该集合中的第一个节点,我不记得了。应用一元减去'sum()'返回的值应该解决这个问题。 XSLT 2.0还有一个'abs()'函数,可以用来代替我最后的代码片段。 – 2012-01-13 22:26:04
FWIW,切换操作数和使用二进制代替一元减号更具可读性。 – 2012-01-13 23:24:12