xsl:function

Allows the creation of user-defined stylesheet function that can be called from any XPath expression within the stylesheet in which the function is defined. This instruction is supported in XSLT 2.0 only.

Format

<xsl:function name="Qname" as="sequence type" [override="yes" | "no"]> 
function_body 
</xsl:function> 

Description

The value of the name attribute, Qname, is a qualified name and takes the form prefix:name. The prefix is required in order to avoid possible conflicts with any functions in the default function namespace. The prefix cannot refer to a reserved namespace.

The function_body contains zero or more <hyperlink>xsl:param elements that specify the formal arguments of the function. These xsl:param elements are followed by a sequence constructor that defnes the value to be returned by the function. The xsl:param elements within an xsl:function element must be empty; they cannot have a select attribute because they must be specified.

An xsl:function declaration can only appear as a top-level element in a stylesheet.

Example

Here is an example from the W3C XSLT Working Draft of a simple function that reverses the order of the words in a sentence.

<xsl:transform  
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:str="http://example.com/namespace" 
  version="2.0" 
  exclude-result-prefixes="str"> 
  
<xsl:function name="str:reverse" as="xs:string"> 
  <xsl:param name="sentence" as="xs:string"/> 
  <xsl:sequence   
     select="if (contains($sentence, ' ')) 
             then concat(str:reverse(substring-after($sentence, ' ')), 
                         ' ', 
                         substring-before($sentence, ' ')) 
             else $sentence"/> 
</xsl:function> 
  
<xsl:template match="/"> 
<output> 
  <xsl:value-of select="str:reverse('DOG BITES MAN')"/> 
</output> 
</xsl:template> 
  
</xsl:transform> 

 
Free Stylus Studio XML Training: