我该如何在XSLT中计算一个数的绝对值?

16

我有

<xsl:value-of select="DifferenceInDays" /> 

DifferenceInDays 的值可能是负数或正数,我想显示它的绝对值。该怎么做?


1
也许你可以接受一个答案? - Dimitre Novatchev
4个回答

36

在XPath 1.0中使用以下表达式::

   $vNum*($vNum >=0) - $vNum*($vNum < 0)

在XSLT(XML)属性中嵌入此表达式时,必须对<字符进行转义:

   $vNum*($vNum >=0) - $vNum*($vNum &lt; 0)

在XPath 2.0(XSLT 2.0)中,使用abs()函数。


6
这可以通过使用xpath绝对函数来实现。
<xsl:value-of select="abs(DifferenceInDays)"/>

那是XPath 2.0,基本上不存在。 - MushyPeas

5

有些答案对于XSLT 1.0而言过于复杂了,实际上它要简单得多。通过使用数字格式化,您可以定义正负数的结构,其中默认的负数是-0,但您也可以定义自己的负数。

<xsl:value-of select='format-number(DifferenceInDays,"0;0")'/>

上面的代码将通过使用提供的格式化函数显示“天数差”的绝对值。

据我所知,它应该可以在各种情况下工作。format-number 功能是在 XSLT 1.0 规范中提供的。 - Jon Mifsud
1
你已经在任何一个上测试过这个了吗?如果是,它在哪一个上起作用了? - michael.hor257k
1
你没有回答我的问题。PHP不是XSLT处理器。Xalan-JSaxon 6.5和libxslt才是。这在这三个中的任何一个都不起作用。 - michael.hor257k
另外仅供参考,你提供的链接中的Saxon 9 - 我提供的示例也可以正常工作。因此很可能是对规范的误解与之前版本的比较。 - Jon Mifsud
5
是的,在Saxon 9中可以使用,它是一个XSLT 2.0处理器,因此遵循不同的规范。无论如何,如果你想要一个简单的、通用的字符串操作解决方案,请尝试使用translate($number, '-', '') - michael.hor257k
显示剩余4条评论

1
diffInDays * (1 - 2*(diffInDays < 0))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接