Rechell -
Sorry to take so long in responding. It's been a hectic morning.
You are passing the parameters to the top level of the stylesheet but
you are trying to receive them as parameters to the template with
match="data". Unfortunately, they were not passed to the that template
by the "xml" template so there is nothing to receive and you get the
default values.
If you move your two xsl:param elements to just after the xsl:output
element, everything should work as you expect since global parameters
are known in all templates. You could actually move them out of the
xsl:template and put them in between any of the templates so that they'd
be at the top level but I like to keep them at the top so that the
top-level parameters are easily spotted.
HTH,
Gary
> "Schwartz, Rechell R, NLCIO" wrote:
>
> Hello,
>
> I have been banging my head against the wall trying to sort with a a
> parameter-based xsl stylesheet. I have tried the suggestions posted in
> previous e-mails on this subject as well as in articles on the Web,
> but I still can't get the sorting to work. Basically, I am trying to
> take an xml file and convert it to another xml file that is sorted
> based on a column and sort order that are dynamically selected by the
> user. I pass the parameters for the column name and sort order in as
> strings to the stylesheet using the Tarsnformer's setParameter()
> method. The problem is that the stylesheet always uses the default
> values for the column names and the sort order, regardless of what I
> pass in as a parameter. Any help would be GREATLY appreciated.
>
> Rechell Schwartz
>
> Here is the code for how I set the parameters:
> public void sortXSL(String sortParameter, String sortOrder) throws
> TransformerException, TransformerConfigurationException,
> FileNotFoundException
> {
> TransformerFactory tFactory = TransformerFactory.newInstance();
> String xsl = "c:\\directoryname\\xmlStyleSheet.xsl";
> Transformer transformer = tFactory.newTransformer(new
> StreamSource(xsl));
> DOMResult domResult = new DOMResult();
> transformer.setParameter("sortcolumn",
> sortParameter.trim().toUpperCase());
> transformer.setParameter("sortorder", sortOrder);
> transformer.transform(new DOMSource(document), domResult);
> document = (Document)domResult.getNode();
>
> }
>
> Here is the xsl stylesheet:
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="1.0">
> <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
>
> <xsl:template match="xml">
> <xml>
> <data>
> <xsl:apply-templates/>
> </data>
> </xml>
> </xsl:template>
>
> <xsl:template match="data">
> <xsl:param name="sortcolumn" select="'COLUMN1'"/>
> <xsl:param name="sortorder" select="'ascending'"/>
> <xsl:apply-templates select="row">
> <xsl:sort order="{$sortorder}" data-type="text"
> select="*[name()=$sortcolumn]"/>
> </xsl:apply-templates>
> </xsl:template>
>
> <xsl:template match="row">
> <xsl:copy-of select="."/>
> </xsl:template>
>
> <xsl:template match="columntype">
> <xsl:copy-of select="."/>
> </xsl:template>
>
> <xsl:template match="truncated">
> <xsl:copy-of select="."/>
> </xsl:template>
>
> <xsl:template match="truncationsize">
> <xsl:copy-of select="."/>
> </xsl:template>
>
> </xsl:stylesheet>
>
> Finally, here is the xml file that is inputted to the stylesheet:
>
> <xml>
> <data>
> <row>
> <COLUMN1>ABC</COLUMN1><COLUMN2>ABC2</COLUMN2>
> </row>
> <row>
> <COLUMN1>GHI</COLUMN1><COLUMN2>GHI2</COLUMN2>
> </row>
> <row>
> <COLUMN1>DEF</COLUMN1><COLUMN2>DEF2</COLUMN2>
> </row>
> <columntype><COLUMN1>string</COLUMN1><COLUMN2>string</COLUMN2>
> <truncated>no</truncated>
> <truncationsize>1000</truncationsize>
> </data>
> </xml>