如何计算XSLT中数字的绝对值?

Mit*_*hil 13 xslt xslt-2.0 xslt-1.0

我有

<xsl:value-of select="DifferenceInDays" /> 
Run Code Online (Sandbox Code Playgroud)

DifferenceInDays可以是消极的或积极的,我想把它显示为正面.我怎样才能做到这一点?

Dim*_*hev 30

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

   $vNum*($vNum >=0) - $vNum*($vNum < 0)
Run Code Online (Sandbox Code Playgroud)

如果此表达式嵌入在XSLT(XML)属性中,则<必须转义该字符:

   $vNum*($vNum >=0) - $vNum*($vNum &lt; 0)
Run Code Online (Sandbox Code Playgroud)

在XPath 2.0(XSLT 2.0)中使用该abs()函数.


Jor*_*ory 6

这可以使用xpath abs函数来实现.

<xsl:value-of select="abs(DifferenceInDays)"/>
Run Code Online (Sandbox Code Playgroud)


小智 5

有些答案使 XSLT 1.0 的生活变得过于复杂,而实际上 XSLT 1.0 要简单得多。使用数字格式,您可以定义正数和负数的结构,-0但您可以定义自己的默认负数。

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

上面的代码只需使用提供的格式化函数即可显示天数差异的绝对值。

  • 是的,它确实可以在 Saxon 9 中工作 - 这是一个 **XSLT 2.0** 处理器,因此遵循不同的规范。无论如何,如果您想要一个使用通用字符串操作的简单解决方案,请尝试“translate($number, '-', '')”。 (5认同)