XSLT:我们可以使用abs值吗?

我想知道在XLST中我们是否可以使用数学:abs(…)? 我在某个地方看到了它,但它不起作用。 我有类似的东西:

   

我尝试过这样的事情:

    

但不起作用。 我正在使用java 1.6语言。

这是一个实现abs()函数的单个XPath表达式

 ($x >= 0)*$x - not($x >= 0)*$x 

这个评估为 abs($x)

以下是对此的简要演示

              

当此转换应用于以下XML文档时:

  -3 0 5  

生成所需的正确结果 (每个数字上的abs()):

  3 0 5  

abs()是微不足道的。 在纯XSLT中实现它看起来像这样:

            

在你的上下文中,你会像这样调用它:

      

其他方式:

 (2*($x >= 0) - 1)*$x 

当$ x为正数时,测试返回“true”,因此2 * true-1返回1,因此最终结果为$ x。 当$ x为负数时,测试返回“false”,因此2 * false-1返回-1,因此最终结果为 – $ x。

运用

 2*(any-test-here)-1 

当test为true时 ,是一个很好的方法,当为false时为-1

一个非常简单的解决方案是使用XSL 1.0转换function。 即

 
		      	

math:abs不是内置于XSLT或XPATH中。 它是一个XSLT扩展,由您正在转换的运行时提供。

这是一篇关于.NET xslt扩展的文章。

这是Java (Xalan)的一个。