Hi,

Which version of Xalan are you using?

I tried the following with Xalan 2.7.0 and it seemed to work (though admittedly I used an identity transform for the preprocessor.xsl):

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

      TemplatesHandler tmpltHand = stf.newTemplatesHandler();
      XMLReader reader = XMLReaderFactory.createXMLReader();
      reader.setContentHandler(tmpltHand);
      reader.parse("identity.xsl");

      Templates templates = tmpltHand.getTemplates();
      TransformerHandler transHand = stf.newTransformerHandler(templates);
      reader.setContentHandler(transHand);  
      reader.setProperty("http://xml.org/sax/properties/lexical-handler", transHand);
     
     
      TemplatesHandler tmpltHand2 = stf.newTemplatesHandler();
      transHand.setResult(new SAXResult(tmpltHand2));
      reader.parse("simple.xsl");
     
      Templates templates2 = tmpltHand2.getTemplates();
      TransformerHandler transHand2 = stf.newTransformerHandler(templates2);
      reader.setContentHandler(transHand2);
      reader.setProperty("http://xml.org/sax/properties/lexical-handler", transHand2);

      transHand2.setResult(new StreamResult(System.out));
      reader.parse("simple.xml");
 
Thanks,

Erin Harris




"Barney Barumba" <[EMAIL PROTECTED]>

01/27/2006 04:44 AM

To
xalan-j-users@xml.apache.org
cc
Subject
Using TemplatesHandler as a SAXResult





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 an error when I try. I'm not 100% sure exactly what
is going on here, so if someone could help I'd be grateful.

I've been working through the Xalan examples, 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



--
___________________________________________________
Play 100s of games for FREE! http://games.mail.com/


Reply via email to