[jdom-interest] JDOM and XSL

Jan Peter Hecking jan at netgaroo.com
Fri Feb 9 08:43:12 PST 2001


On Fri, Feb 09, 2001 at 03:50:33PM +0100, Jan Peter Hecking wrote:
> I've attached example code for this set of transformations.

Sorry, forgot the attachment. Here it is.

bye,
Jan

-- 
Jan Peter Hecking                  jhecking at netgaroo.com
University of Rostock     Department of Computer Science
Homepage: http://www.informatik.uni-rostock.de/~jhecking
-------------- next part --------------
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
import org.jdom.output.SAXOutputter;

import java.io.PipedInputStream;
import java.io.PipedOutputStream;

import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;

import javax.xml.transform.Templates;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TemplatesHandler;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

public class XsltTransformer
{
    private SAXBuilder saxBuilder;
    private SAXOutputter saxOutputter;
    private SAXTransformerFactory saxTFactory;
    private TemplatesHandler templatesHandler;
    private XMLReader reader;

    public XsltTransformer()
        throws XsltTransformerException
    {
        try{
            saxBuilder = new SAXBuilder();
            saxOutputter = new SAXOutputter( null );
            saxTFactory = (SAXTransformerFactory) TransformerFactory.newInstance();
            templatesHandler = saxTFactory.newTemplatesHandler();
            reader = XMLReaderFactory.createXMLReader();
            reader.setContentHandler( templatesHandler );
        }
        catch( Exception e ){
            e.printStackTrace();
        }
    }//XsltTransformer()

    public synchronized Document transform( Document sourceDoc,
                                            String stylesheet )
        throws XsltTransformerException
    {
        try{
            // parse stylesheet to set up TemplatesHandler
            reader.parse( stylesheet );

            // create a new TransformerHandler that outputs a XML stream
            PipedInputStream resultIS = new PipedInputStream();
            PipedOutputStream resultOS = new PipedOutputStream( resultIS );
            Templates templates = templatesHandler.getTemplates();
            TransformerHandler handler= saxTFactory.newTransformerHandler(
                    templates );
            handler.setResult( new StreamResult( resultOS ) );

            // generate SAX events and send them to the TransformerHandler
            saxOutputter.setContentHandler( handler );
            saxOutputter.output( sourceDoc );
            resultOS.close();

            // build a JDOM document from the resulting XML stream
            Document targetDoc = saxBuilder.build( resultIS );
            return targetDoc;
        }
        catch( Exception e ){
            e.printStackTrace();
        }
    }//transform()
}//XsltTransformer


More information about the jdom-interest mailing list