[2.0] Creating New Functions with <xsl:function>

XSLT 2.0 adds the <xsl:function> element. This lets you define your own functions in the stylesheet itself. This is the simplest extension that we’ll examine in this chapter; the extension itself is in the same file and same syntax as the stylesheet, and the standard is very clear on how the function is defined and invoked. We’ll use a simple stylesheet that creates a table in which the background color of each cell cycles through four different colors. Given the position of the current item, our function will return one of the four values.

To define a function, there are several things we have to do: define a (non-XSLT) namespace for the function, name the function, define what datatype it returns, and define the name and datatype of any parameters the function has. Defining a namespace is simple enough, although we need to remember to put our namespace prefix in the exclude-result-prefixes attribute of <xsl:stylesheet>. We’ll call our function getBackgroundColor, and it will return an xs:string naming the background color of each table cell. Finally, the input to our function is an xs:integer of the position of the current item. The function looks like this:

<xsl:function name="sample:getBackgroundColor" as="xs:string">
  <xsl:param name="pos" as="xs:integer"/>
  <xsl:value-of select="$colors[($pos mod count($colors)) + 1]"/>
</xsl:function>

The function is in the sample namespace, it returns a string, and it takes an integer as its only ...

Get XSLT, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.