[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.