C# XSLT,将所有负节点和所有节点相加为绝对值
我可以使用SUM(xpath)对所有节点值进行求和,但我还需要对所有正节点值、所有负节点值和所有节点值进行求和,并将它们视为绝对值。XSLT是否可以这样做?要求所有正节点值的和,可以执行以下操作:C# XSLT,将所有负节点和所有节点相加为绝对值,c#,xml,xslt,C#,Xml,Xslt,我可以使用SUM(xpath)对所有节点值进行求和,但我还需要对所有正节点值、所有负节点值和所有节点值进行求和,并将它们视为绝对值。XSLT是否可以这样做?要求所有正节点值的和,可以执行以下操作: <xsl:value-of select="sum(//*[. > 0])" /> <xsl:value-of select="sum(//*[. < 0])" /> <xsl:value-of select="sum(//*[. &
<xsl:value-of select="sum(//*[. > 0])" />
<xsl:value-of select="sum(//*[. < 0])" />
<xsl:value-of select="sum(//*[. > 0]) - sum(//*[. < 0])" />
要将所有负节点值相加,可以执行以下操作:
<xsl:value-of select="sum(//*[. > 0])" />
<xsl:value-of select="sum(//*[. < 0])" />
<xsl:value-of select="sum(//*[. > 0]) - sum(//*[. < 0])" />
要对这些数字的绝对值求和,可以执行以下操作:
<xsl:value-of select="sum(//*[. > 0])" />
<xsl:value-of select="sum(//*[. < 0])" />
<xsl:value-of select="sum(//*[. > 0]) - sum(//*[. < 0])" />
请参见
有关解决此问题的一般方法列表,请参见错误。sum(//x)在XSLT2.0中给出了一个类型错误,因为一元减号只能应用于单例;在XSLT1.0中,除了节点集中的第一个节点外,它忽略了所有节点,这破坏了目的。感谢大家的提醒,它在我使用的在线测试仪中起作用,但负数可能是节点集中的第一个节点,我不记得了。对
sum()
返回的值应用一元减应该可以解决这个问题。XSLT 2.0还有一个abs()
函数,可以用来代替我的上一个代码片段。FWIW,切换操作数并使用二进制而不是一元减号更具可读性。