Subject: Re: JAXP: SAXResult.setSystemId()
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Mon, 31 Dec 2007 10:15:29 +0000
|
On 31/12/2007, Florent Georges <lists@xxxxxxxxxxxx> wrote:
> Hi
>
> First, I think JAXP questions are on topic here (as long
> as they are about its XSLT part). Please correct me if I am
> wrong.
>
> I thought that the SAXResult.setSystemId(String) method
> set the System ID of the SAX events thrown by the transform.
> But the following code displays the System ID of the
> stylesheet:
>
> public static void main(String[] args)
> throws TransformerException
> {
> // stylesheet and input sources
> Source style_src = ...;
> Source input = ...;
>
> // the stylesheet
> SAXTransformerFactory factory = new TransformerFactoryImpl();
> Templates style = factory.newTemplates(style_src);
>
> // the SAX handler
> ContentHandler handler = new DefaultHandler() {
> public void setDocumentLocator(Locator loc) {
> System.err.println(loc.getSystemId());
> }
> };
>
> // the result, encapsulating the handler
> SAXResult result = new SAXResult();
> result.setHandler(handler);
> result.setSystemId("http://sample.com/system-id");
>
> // the transform
> style.newTransformer().transform(input, result);
> }
>
> Tested with Saxon 9.
>
> Did I mix up something?
Maybe...
Normally with a SAXTransformerFactory you set the result using
handler.setResult(...)
and start the transform by call parse on the XMLReader eg:
xmlReader.setContentHander(...)
xmlReader.parse(...)
...but you've used the "standard" way for a normal TransformerFactory
- I'm not sure the handler gets the events that way.
cheers
--
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/
|