Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XSLT,将所有负节点和所有节点相加为绝对值_C#_Xml_Xslt - Fatal编程技术网

C# XSLT,将所有负节点和所有节点相加为绝对值

C# XSLT,将所有负节点和所有节点相加为绝对值,c#,xml,xslt,C#,Xml,Xslt,我可以使用SUM(xpath)对所有节点值进行求和,但我还需要对所有正节点值、所有负节点值和所有节点值进行求和,并将它们视为绝对值。XSLT是否可以这样做?要求所有正节点值的和,可以执行以下操作: <xsl:value-of select="sum(//*[. &gt; 0])" /> <xsl:value-of select="sum(//*[. &lt; 0])" /> <xsl:value-of select="sum(//*[. &

我可以使用SUM(xpath)对所有节点值进行求和,但我还需要对所有正节点值、所有负节点值和所有节点值进行求和,并将它们视为绝对值。XSLT是否可以这样做?

要求所有正节点值的和,可以执行以下操作:

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

要将所有负节点值相加,可以执行以下操作:

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

要对这些数字的绝对值求和,可以执行以下操作:

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

请参见


有关解决此问题的一般方法列表,请参见错误。sum(//x)在XSLT2.0中给出了一个类型错误,因为一元减号只能应用于单例;在XSLT1.0中,除了节点集中的第一个节点外,它忽略了所有节点,这破坏了目的。感谢大家的提醒,它在我使用的在线测试仪中起作用,但负数可能是节点集中的第一个节点,我不记得了。对
sum()
返回的值应用一元减应该可以解决这个问题。XSLT 2.0还有一个
abs()
函数,可以用来代替我的上一个代码片段。FWIW,切换操作数并使用二进制而不是一元减号更具可读性。