[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 ExtensionFunction (6.5.x)
From: "W. Eliot Kimber" <eliot@xxxxxxxxxx>
Date: Fri, 18 Apr 2003 10:29:27 -0500
new bytearrayinputstream
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



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.