2012-01-13 70 views

回答

3

总之一切积极节点值,你可以这样做:

<xsl:value-of select="sum(//*[. &gt; 0])" /> 

总之所有的负节点的值,你可以这样做:

<xsl:value-of select="sum(//*[. &lt; 0])" /> 

综上所述数字的绝对值,你可以这样做:

<xsl:value-of select="sum(//*[. &gt; 0]) - sum(//*[. &lt; 0])" /> 
+3

错误列表。 sum( - // x)在XSLT 2.0中给出类型错误,因为一元减号只能应用于单例;在XSLT 1.0中,它忽略了除节点集中的第一个节点之外的所有节点,这会破坏目的。 – 2012-01-13 22:19:22

+0

感谢您的提醒,它在我使用的在线测试工作,但负数可能是该集合中的第一个节点,我不记得了。应用一元减去'sum()'返回的值应该解决这个问题。 XSLT 2.0还有一个'abs()'函数,可以用来代替我最后的代码片段。 – 2012-01-13 22:26:04

+0

FWIW,切换操作数和使用二进制代替一元减号更具可读性。 – 2012-01-13 23:24:12

相关问题