O'Reilly logo

XSLT Cookbook by Sal Mangano

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Implementing Common Math Functions

Problem

You need to go beyond fifth-grade math even though XSLT 1.0 does not.

Solution

Pure XSLT implementations are provided for absolute value, square root, logarithms, power, and factorial.

Absolute value: math:abs(x)

The obvious but long-winded way to determine the absolute value of a number is shown here:

<xsl:template name="math:abs">
     <xsl:param name="x"/>
     
     <xsl:choose>
          <xsl:when test="$x &lt; 0">
               <xsl:value-of select="$x * -1"/>
          </xsl:when>
          <xsl:otherwise>
               <xsl:value-of select="$x"/>
          </xsl:otherwise>
     </xsl:choose>
     
</xsl:template>

The short but obscure way relies on the fact that the true always converts to the number 1 and false to the number 0.

<xsl:template name="math:abs">
     <xsl:param name="x"/>
     <xsl:value-of select="(1 - 2 *($x &lt; 0)) * $x"/>
</xsl:template>

I prefer the latter because it is concise. Alternatively, you can use an extension function (see Chapter 12).

Square root: math:sqrt(x)

Nate Austin contributed a native XSLT sqrt to EXSLT that uses Newton’s method:

<xsl:template name="math:sqrt"> <!-- The number you want to find the square root of --> <xsl:param name="number" select="0"/> <!-- The current 'try'. This is used internally. --> <xsl:param name="try" select="1"/> <!-- The current iteration, checked against maxiter to limit loop count --> <xsl:param name="iter" select="1"/> <!-- Set this up to ensure against infinite loops --> <xsl:param name="maxiter" select="20"/> <!-- This template was written by Nate Austin using Sir ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required