xsl-list
[Top] [All Lists]

RE: How to: Returning HTML Elements From a Saxon Extension Function (6.5.x)

2003-04-17 14:53:24
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