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
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