Subject: RE: Saxon Serializing and COntentHandler
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 17 Dec 2004 21:24:18 -0000
|
It's possible to do this entirely with JAXP interfaces, you don't need to
resort to Xalan-specific or Saxon-specific methods. This relies on the fact
that a serializer is simply an identity transformer from a SAX source to a
Stream result:
TransformerHandler serializer = TransformerFactory.getTransformerHandler();
serializer.getTransformer().setOutputProperties(properties);
serializer.setResult(new StreamResult(System.out)):
xmlFilter2.setContentHandler(serializer);
You can do it using lower-level Saxon methods if you prefer, this gives you
a bit more control but it's trickier because there are more objects to
manage and more things to get wrong (and it's likely to change a bit from
one release to the next). You're almost there, but it's probably best to use
the same Configuration and NamePool throughout the pipeline, so rather than
creating a new Configuration, get the one that's already used for the
transformation, e.g. as
((Controller)((Filter)xmlFilter2).getTransformer()).getConfiguration();
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Neville Thomas [mailto:nthomas@xxxxxxxxx]
> Sent: 17 December 2004 19:11
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Saxon Serializing and COntentHandler
>
> In Xalan I am able to do the following:
>
> Serializer serializer = SerializerFactory.getSerializer
>
> (OutputPropertiesFactory.getDefaultMethodProperties("xml"));
> serializer.setOutputStream(System.out);
> xmlFilter2.setContentHandler(serializer.asContentHandler());
>
> How will I acheive similar with Saxon8b.
> I tried using that ContentEmitter along with the
> ReceivingContentHandler
> (see below) but I dont think I am setting up the Configuration Object
> properly.
>
> Properties xep = new Properties();
> NamePool np = NamePool.getDefaultNamePool();
> Configuration config = new Configuration();
> config.setNamePool(np);
>
> XMLEmitter xe = new XMLEmitter();
> xe.setStreamResult(new StreamResult(new PrintWriter(System.out,
> true)));
> xe.setOutputProperties(xep);
> xe.setConfiguration(config);
>
> ReceivingContentHandler rch = new ReceivingContentHandler();
> rch.setReceiver(xe);
> rch.setNamePool(np);
> xmlFilter2.setContentHandler(rch);
> xmlFilter2.parse(new InputSource("SouthPole.xml"));
>
>
> Neville
>
> --
> ==================================================================
> Virtual Technology Corporation | 5510 Cherokee Rd, Suite 350
> | Alexandria, VA 22312-2300
> _/ _/_/_/_/_/_/_/_/_/ |
> _/ _/ |
> _/ _/ _/ _/_/_/_/ | Neville Thomas
> _/ _/ _/ _/ | E-Mail addr: nthomas@xxxxxxxxx
> _/ _/ _/ _/ | Office : 703.333.6233
> _/_/ _/ _/ | Fax : 703.658.7057
> _/ _/ _/_/_/_/ |
> |
> ===================================================================
> "Software and Systems Engineering Professionals."
> ===================================================================
|