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)的一个。