You want to extend the functionality of XSLT by adding elements with custom behavior.
Prior sections considered how extensions provided by the XSLT implementers could be used to your advantage. This section develops your own extension elements from scratch. Unlike extension functions, creating extension elements requires much more intimacy with a particular processor’s implementation details. Because processor designs vary widely, much of the code will not be portable between processors.
This section begins with a simple extension that provides syntactic
sugar rather than extended functionality. A common requirement in
XSLT coding is to switch context to another node. Using an
xsl:for-each is an idiomatic way of accomplishing
this. The process is somewhat confusing because the intent is not to
loop but to change context to the single node
defined by the
<xsl:for-each select="document('new.xml')"> <!-- Process new document --> </xsl:for-each>
You will implement an extension element called
which acts exactly like
xsl:for-each, but only on
the first node of the node set defined by the select (normally, you
have only one node anyway).
Saxon requires an implementation of the
com.icl.saxon.style.ExtensionElementFactory interface for all extension elements associated with a particular namespace. The factory is responsible for creating the extension elements from the element’s local name. The second ...