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

CC.*_*CC. 4 java xslt

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

<tag>
  <xsl:value-of select="./product/blablaPath"/>
</tag>
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的事情:

<tag>
  <xsl:value-of select="math:abs(./product/blablaPath)"/>
</tag>
Run Code Online (Sandbox Code Playgroud)

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

Dim*_*hev 7

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

($x >= 0)*$x - not($x >= 0)*$x
Run Code Online (Sandbox Code Playgroud)

这评估为 abs($x).

以下是对此的简要演示:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="text()">
  <xsl:param name="x" select="."/>
  <xsl:value-of select=
  "($x >= 0)*$x - not($x >= 0)*$x"/>
 </xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

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

<t>
  <num>-3</num>
  <num>0</num>
  <num>5</num>
</t>
Run Code Online (Sandbox Code Playgroud)

在想,正确的结果(ABS()上的每个数字)产生:

<t>
  <num>3</num>
  <num>0</num>
  <num>5</num>
</t>
Run Code Online (Sandbox Code Playgroud)