Subject: [xsl] XSLT parameters in TrAX filter chains? From: Stephen Summerfield <StephenS@xxxxxxxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 11 Mar 2004 10:52:01 -0000 |
I am using the Java/TrAX XMLFilter to create a chain of XSLT transformations, I am wanting to be able to inject parameters into the XSLT stylesheets from the application. The Transformer interface allows this using setParameter(name, value). This works fine for simple XSLT transformations, but I can't get it to work for filter chains. Some code: Simple transform - parameters work fine: ... SAXTransformerFactory stf = (SAXTransformerFactory) TransformerFactory.newInstance(); // Set up the output stream StreamResult result = new StreamResult(System.out); // Set up the transformer to process the SAX events generated // by the last filter in the chain Transformer transformer = stf.newTransformer(stylesheetSource); SAXSource transformSource = new SAXSource(input); transformer.setParameter("bob", "Kate"); transformer.transform(transformSource, result); ... Filter transform chain - parameter values are not seen in the stylesheets: ... SAXTransformerFactory stf = (SAXTransformerFactory) TransformerFactory.newInstance(); XMLFilter filter1 = stf.newXMLFilter(new StreamSource(stylesheet1)); XMLFilter filter2 = stf.newXMLFilter(new StreamSource(stylesheet2)); filter1.setParent(reader); filter2.setParent(filter1); // Set up the output stream StreamResult result = new StreamResult(System.out); Transformer transformer = stf.newTransformer(); SAXSource transformSource = new SAXSource(filter2, input); transformer.setParameter("bob", "Kate"); transformer.transform(transformSource, result); ... Example stylesheet with parameter: <?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:param name="bob"/> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> $bob=[<xsl:value-of select="$bob"/>] <xsl:apply-templates/> </xsl:template> </xsl:stylesheet> The key difference seems to be this line: Transformer transformer = stf.newTransformer() and Transformer transformer = stf.newTransformer(stylesheetSource); Certainly in the Xalan stuff in JDK1.4.2 the class of the transformer object returned in each case is different (TransformerIdentityImpl or TransformerImpl). All the examples I have found that use setParameter() on Transformer don't use filter chains. Question is: is this supposed to work or is this a bug? If not any suggestions on how to inject parameters into the transformations of a filter chain? Ideally I would be able to inject different parameters for each of the transforms in the filter chain, but simply setting parameters that apply to all transformations would be ok. Steve XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] binding xml to stylesheet, Wendell Piez | Thread | Re: [xsl] XSLT parameters in TrAX f, Paul Tremblay |
RE: [xsl] Confision with replace-st, Hattersley, John | Date | Re: [xsl] Confision with replace-st, David Carlisle |
Month |