You should probably be asking this question on the Saxon list rather
than here, but here goes.
This is actually a lot easier in 7.4 than in 6.5.2. In 7.4 there are two
very easy solutions:
(1) call XPathEvaluator, you can give this any JAXP Source object, and
it will give you back a NodeInfo which you can return from your
extension function
(2) return the XML string to the stylesheet and call saxon:parse to
parse it into a tree.
In 6.5.2 you have to probe a little bit deeper to find the right
interfaces. I think the simplest way (because it involves least use of
Saxon-specific methods) is to do a JAXP identity transformation from any
Source object to a DOMResult, where the DOMResult is primed using
setNode() on a document node created using new
com.icl.saxon.TinyDocumentImpl(); you can then return this document node
as the result of your extension function.
Happy Easter,
Michael Kay
Software AG
home: Michael(_dot_)H(_dot_)Kay(_at_)ntlworld(_dot_)com
work: Michael(_dot_)Kay(_at_)softwareag(_dot_)com
-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of
W. Eliot Kimber
Sent: 17 April 2003 19:39
To: xsl-list
Subject: [xsl] How to: Returning HTML Elements From a Saxon
Extension Function (6.5.x)
I want to make sure I'm thinking about a small XSLT puzzle
correctly: my
requirement is to provide a Saxon extension function that returns a
restult tree (or a string that will become a result tree). What I'm
doing is building a navigation bar based on configuration information
held in an external file and accessed through an external
Java library.
If I just return the markup as a string (e.g., return "<a
href="#foo">bar</a>";) then it gets escaped, as you would expect.
Looking through the docs for extension functions, it appears
that I need
to return a NodeInfo node that contains nodes for the markup.
NodeInfo
is a Saxon-specific DOM implementation. The Saxon DOM
implementation is
read-only, and if I'm understanding the docs correctly, I
have to use a
SAX process to construct new nodes.
This leads to two questions:
1. Is my analysis correct or have I missed some easy way to
return this
markup?
2. If my analysis is correct, does anyone have an example of
doing this
sort of off-the-cuff SAX processing I could crib from? I
didn't find any
examples in the Saxon-supplied samples.
Thanks,
Eliot
--
W. Eliot Kimber, eliot(_at_)isogen(_dot_)com
Consultant, ISOGEN International
1016 La Posada Dr., Suite 240
Austin, TX 78752 Phone: 512.656.4139
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list