Hello all,

I would like to use xalan to implement aggregated XML pipeline similar to the
Cocoon pipeline aggregator. The final document shall be an HTML page composed
of 2 or more XML fragments which are results of an XSLT transformations.
The problem is, that each XSLT transformer produces startDocument and
endDocument SAX events, so that they occur many times in the final document.
According to SAX API, it is allowed to call startDocument/endDocument only
once. So, how to solve this problem?

Diagram showing the pipeline configuration:

                                          +------------+
                                     +----| XSLT Trf 1 |<- SAX Evts
+------------------------+  SAX Evts |    +------------+
| Aggregated Content Trf |<----------+
+------------------------+           |    +------------+
                                     +----| XSLT Trf 2 |<- SAX Evts
                                          +------------+

Simplified code:

TransformerHandler serializerHandler = factory.newTransformerHandler();
serializerHandler.setResult(new StreamResult(out));

TransformerHandler xslHandler1 = factory.newTransformerHandler(templates1);
TransformerHandler xslHandler2 = factory.newTransformerHandler(templates2);

xslHandler1.setResult(new SAXResult(serializerHandler));
xslHandler2.setResult(new SAXResult(serializerHandler));

serializerHandler.startDocument();
serializerHandler.startElement("", "html", "html", HTML_ATTRS);
// other initial elements

xslHandler1.startDocument();
// Generate SAX events for the first fragment
xslHandler1.endDocument();

xslHandler2.startDocument();
// Generate SAX events for the second fragment
xslHandler2.endDocument();

serializerHandler.endElement("", "html", "html");
serializerHandler.endDocument();


Martin

Reply via email to