Use output of XSL transformation as new XSL stylesheet

B

barney.b

Hi,

I'm trying to pre-process an XSL stylesheet with another stylesheet,
before using the result to transform an XML document. i.e.:

stylesheet(xsl) --> preprocessor(xsl) --> temp(xsl)
input(xml) --> temp(xsl) --> output(xml)

but I'm getting a NullPointerException. I'm not 100% sure exactly what
is going on here, so if someone could help I'd be grateful.

I've been working from the examples from Sun and Apache Xalan, and so
far have the following:

File input = new File("input.xml");
File stylesheet = new File("stylesheet.xsl");
File preprocessor = new File("preprocess.xsl");

SAXTransformerFactory stf =
(SAXTransformerFactory)TransformerFactory.newInstance();

// parse preprocessor stylesheet into templates handler
TemplatesHandler tmpltHand = stf.newTemplatesHandler();
XMLReader reader = XMLReaderFactory.createXMLReader();
reader.setContentHandler(tmpltHand);
reader.parse(new InputSource(new FileInputStream(preprocessor)));

// create transformer handler based on templates handler
Templates templates = tmpltHand.getTemplates();
TransformerHandler transHand =
stf.newTransformerHandler(templates);

// parse page stylesheet through proprocessor
reader.setContentHandler(transHand);
reader.setProperty("http://xml.org/sax/properties/lexical-handler",
transHand);

transHand.setResult(new StreamResult(System.out));
reader.parse(new InputSource(new FileInputStream(stylesheet)));

This all works fine, and displays the modified stylesheet. It's when I
try to use this stylesheet it all goes wrong. I thought I could just
redirect the output of the last stage, via a SAXResult. into a new
TemplatesContentHandler, and then use this to transform the actual
input.

replace:
transHand.setResult(new StreamResult(System.out));

with:
TemplatesHandler tmpltHand2 = stf.newTemplatesHandler();
transHand.setResult(new SAXResult(tmpltHand2));

However, when I run this I get a NullPointerException in
TransformerHandlerImpl.endDocument.

Can anybody see what is wrong here, or suggest a better way of doing
this?

Cheers,

Barney
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

xml -xsl transformation in java 1
Why is only the root-element transformed? 0
XSL page output 0
XSL COMPILE 3
XSL Query 1
problem with xslt transformation 2
Any XSL experts? 7
Double-Transformation in one pass? 2

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top