RE: [xsl] Using a TransformerHandler strips comments but a Transformer keeps them

Subject: RE: [xsl] Using a TransformerHandler strips comments but a Transformer keeps them
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 13 Feb 2008 11:17:52 -0000
A SAX parser (XMLReader) doesn't notify comments to the ContentHandler, it
notifies them to the LexicalHandler. So you need to nominate the
TransformerHandler to the XMLReader in both roles: both as ContentHandler
and as LexicalHandler.

Michael Kay
http://www.saxonica.com/
 

> -----Original Message-----
> From: Andrew Welch [mailto:andrew.j.welch@xxxxxxxxx] 
> Sent: 13 February 2008 10:54
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Using a TransformerHandler strips comments but 
> a Transformer keeps them
> 
> Does anyone know why a transform using a TransformerHandler 
> strips comments but the "stardard" Tranformer keeps them.
> 
> For example:
> 
> sourceXML:
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- test outer comment -->
> <foo> <!-- inner comment --> foo</foo>
> 
> The stylesheet is the identity transform.
> 
> The first transformation technique is using a TransformerHandler:
> 
> SAXTransformerFactory stf =
> (SAXTransformerFactory)TransformerFactory.newInstance();;
> TransformerHandler handler = stf.newTransformerHandler(new 
> StreamSource(stylesheet)); handler.setResult(new 
> StreamResult(System.out)); XMLReader xmlReader = 
> XMLReaderFactory.createXMLReader();
> xmlReader.setContentHandler(handler);
> xmlReader.parse(sourceXML.toURI().toString());
> 
> The second is using a Transformer:
> 
> stf.newTransformer(new StreamSource(stylesheet)).
> 		transform(new StreamSource(sourceXML), new 
> StreamResult(System.out));
> 
> Produces this output:
> 
> TransformerHandler:
> <?xml version="1.0" encoding="UTF-8"?><foo>  foo</foo>
> 
> Transformer:
> <?xml version="1.0" encoding="UTF-8"?><!-- test outer comment --><foo>
> <!-- inner comment --> foo</foo>
> 
> 
> I would expect the two to produce identical results.  Has 
> anyone come across this before?
> 
> 
> thanks
> andrew

Current Thread