This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: Re: sorting
- From: "Michael Kay" <michael dot h dot kay at ntlworld dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Tue, 18 Jun 2002 08:50:16 +0100
- Subject: RE: [xsl] Re: sorting
- Reply-to: xsl-list at lists dot mulberrytech dot com
> Thanks for the input.
> However, I wasn't being clear about the line that didn't work:
>
> <xsl:apply-templates select="row">
> <xsl:sort select="column[number(@sort-column)]"
> order="{$sort-order}" /> </xsl:apply-templates>
This means column[position()=number(@sort-column)], i.e. select the
columns whose position is the same as the value of their @sort-column
attribute. I've no idea what you're trying to do, but I'm sure this code
is nonsense.
Michael Kay
Software AG
home: Michael.H.Kay@ntlworld.com
work: Michael.Kay@softwareag.com
>
> The XML looks as follows:
>
> <table sort-col="2" sort-order="ascending">
> <row>
> <column>A</column>
> <column>N</column>
> <column>Z</column>
> </row>
> </table>
>
> Since the attribute 'sort-col' is at the <table> level but
> the select of the <xsl:apply-templates> is at the
> <row> level, perhaps this is the problem? The XSLT engine
> thinks that the attribute is an attribute of
> row? Is this what you are saying?
>
> The case where it does work is when the variable is assigned
> as follows:
>
> <xsl:template match="table">
> <xsl:variable name="sort-col" select="number(@sort-col)" />
>
> and then inside the same template:
>
> <xsl:apply-templates select="row">
> <xsl:sort select="column[$sort-col]"
> order="{$sort-order}" /> </xsl:apply-templates>
>
> so this guarantees that the 'sort-col' variable is set properly?
>
> Thanks,
> Stuart Zakon
> Objects by Design
>
>
> > Date: Sat, 15 Jun 2002 01:23:05 +0200
> > From: Joerg Heinicke <joerg.heinicke@gmx.de>
> > Subject: Re: [xsl] Re: sorting
> >
> > OBD wrote:
> > > That works. Thanks.
> > > In case there is no sort column, will setting the
> variable $chosen
> > > to some value like 0 disable the sort? This is desired so I don't
> > > have to use <xsl:if> to special case the
> > > sorting (there is a related thread on this topic but I
> want to confirm for
> > > this example).
> >
> > 0 is ok. column[0] doesn't exist, so there is nothing to
> sort for and
> > you should get the columns unsorted.
> >
> > > Also, I tried using an attribute directly in the
> predicate instead
> > > of a variable and it didn't work. Is this supposed to
> work? Example:
> > >
> > > <xsl:sort select="column[number(@sort-column)]"/>
> >
> > It's absolutely correct XPATH. But it will not do what you
> want as you
> > already have seen. Written in this way @sort-column refers to the
> > column, i.e. the @sort-column's value of the column to sort
> for. And
> > column is relative to the expression in the <xsl:for-each
> select="...">.
> > I think your only way is to store the @sort-column's value
> in a variable.
> >
> > > Is this a valid predicate? It is still better to use a
> variable, I
> > > believe, because then I could use <xsl:if> to set it to 0
> if there
> > > was no sort-column attribute and get the
> > > benefits I described above, assuming it works that way.
> > >
> > > Thanks,
> > > Stuart Zakon
> >
> > Regards,
> >
> > Joerg
> >
> >
> >
> >
>
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list