Sorry. I got a message from someone else that included
the same XSL stylesheet -- or I at least it looked the same.
On closer examination, it had the following
<xsl:sort
order="{$sortorder}"
data-type="text"
select="{$sortcolumn}"/>
<xsl:apply-templates select="."/>
So moving the params to the top with Rechell's
original stylesheet worked, but not with the slightly
modified version I was testing.
Sorry for the confusion.
Tom
Gary L Peskin wrote:
> Tom --
>
> Check Rechell's code again. There is no AVT in the select attribute.
> What made you think there was?
>
> Gary
>
> Tom Amiro wrote:
> >
> > I tried moving the params to the top and running your
> > xml/xsl files against a few processors -- Saxon, Xalan,
> > and XSLTC. They all complained about the AVT in the
> > select attribute. On reading the XSLT spec, it actually
> > implies in Section 10 that an Attribute Value Template
> > is not legal in the "select" attribute of a Sort element, while
> > is it legal in the "order" attribute. When I hard-wired the
> > element name to 'COLUMN1' in the "select" attribute, all
> > the processors now were happy.
> >
> > I used Xalan from the command line after updating
> > today's build. So I'm confused as to how it works for
> > you now by just moving the params to the global position.
> > Not that I'm not happy for you. Now I'm not sure if there
> > is a deficiency in XSLTC in not handling an AVT in the
> > select attribute -- if Xalan does.
> >
> > Tom
> >
> > "Schwartz, Rechell R, NLCIO" wrote:
> >
> > > Gary,
> > >
> > > Thanks! Your suggestion solved the problem.
> > >
> > > Rechell
> > >
> > > -----Original Message-----
> > > From: Gary L Peskin [mailto:[EMAIL PROTECTED]]
> > > Sent: Thursday, June 14, 2001 3:32 PM
> > > To: [EMAIL PROTECTED]
> > > Subject: Re: Parameter Sorting Problem With Xalan
> > >
> > > 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>