This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: sorting


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> 

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]