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>

Reply via email to