[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: How to: Returning HTML Elements From a Saxon Exten

Subject: RE: How to: Returning HTML Elements From a Saxon Extension Function (6.5.x)
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Sat, 19 Apr 2003 11:33:13 +0100
inputsource byte array
Why do you need to use a byte array? A SAX InputSource is quite happy to
accept a StringReader as the input source.

Michael Kay

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
> W. Eliot Kimber
> Sent: 18 April 2003 16:29
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re:  How to: Returning HTML Elements From a 
> Saxon Extension Function (6.5.x)
> 
> 
> W. Eliot Kimber wrote:
> > W. Eliot Kimber wrote:
> 
> > My analysis is correct--turns out one of my collegues had already
> > figured this out and I didn't know it. What I had missed 
> was the the 
> > "Parse()" method on the Saxon DocumentBuilderImpl class, 
> which allows 
> > you to pass in a string to be parsed more or less directly. 
> Here's the 
> > basic pattern:
> > 
> > public NodeInfo generateResultTree(String markup) {
> >   java.io.ByteArrayInputStream bais = new
> >                       ByteArrayInputStream(markup.getBytes());
> >   org.xml.sax.InputSource isource = null;
> >   try {
> >      isource = new InputSource(bais);
> >   } catch (org.xml.sax.SAXException e) {
> >      e.printStackTrace();
> >   }
> >   org.w3c.dom.Document root = new
> >             com.icl.saxon.om.DocumentBuilderImpl().parse(isource);
> >   return (NodeInfo)(root.getDocumentElement());
> > }
> 
> I discovered it's not quite so simple because the byte array you get 
> from String.getBytes() is a UTF-16 byte sequence, but Aelfred (which 
> Saxon uses in it's DocumentBuilderImpl) only handles UTF-8, 
> so you have 
> to convert the Java UTF-16 string to a UTF-8 byte array, which I did 
> like so:
> 
> public NodeInfo generateMarkup(String markupString) {
>    ByteArrayOutputStream baos = new ByteArrayOutputStream();
> 
>    OutputStreamWriter osw = null;
>    // NOTE: the following exceptions should never happen,
>    //       so there's no point in trapping them.
>    try {
>      osw = new OutputStreamWriter(baos, "UTF-8");
>    } catch (UnsupportedEncodingException e2) {
>      e2.printStackTrace();
>    }
>    try {
>      osw.write(markupString);
>    } catch (IOException e3) {
>      e3.printStackTrace();
>    }
>    try {
>      osw.flush();
>      osw.close();
>    } catch (IOException e4) {
>      e4.printStackTrace();
>    }
>    ByteArrayInputStream bais = new
>          ByteArrayInputStream(baos.toByteArray());
>    InputSource isource = new InputSource(bais);
>    Document root = null;
>    try {
>      root = new DocumentBuilderImpl().parse(isource);
>    } catch (SAXException e1) {
>      e1.printStackTrace();
>    }
>    return (NodeInfo)(root.getDocumentElement());
> }
> 
> 
> 
> -- 
> W. Eliot Kimber, eliot@xxxxxxxxxx
> 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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.