[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

XSLT parameters in TrAX filter chains?

Subject: XSLT parameters in TrAX filter chains?
From: Stephen Summerfield <StephenS@xxxxxxxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 11 Mar 2004 10:52:01 -0000
transformer setparameter
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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.