Adding Extension Elements Using Java
Problem
You want to extend the functionality of XSLT by adding elements with custom behavior.
Solution
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
’s
select
:
<xsl:for-each select="document('new.xml')"> <!-- Process new document --> </xsl:for-each>
You will implement an extension element called
xslx:set-context
,
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 ...
Get XSLT Cookbook 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.