Re: [xsl] sorting titles w stopwords but w/o value in every title node

Subject: Re: [xsl] sorting titles w stopwords but w/o value in every title node
From: "cking" <cking@xxxxxxxxxx>
Date: Thu, 2 Sep 2004 14:33:06 +0200
Michael Kay wrote:
>

> > 
> >  <xsl:variable name="output">
> >   <xsl:for-each select="//section-02">
> >    <xsl:sort 
> > select="exsl:node-set($sort-titles)/*[@doc-number = 
> > current()/doc-number]"/>
> 
> If you're lucky, the optimizer will extract
> 
>    exsl:node-set($sort-titles)/*
> 
> as a subexpression that can be evaluated outside the loop. 
> 
> In case you're not so lucky, it would be better to put it in a variable:
> 
> <xsl:variable name="ref" select="exsl:node-set($sort-titles)/*"/>
> <xsl:variable name="output">
>    <xsl:for-each select="//section-02">
>     <xsl:sort 
>  select="$ref[@doc-number = current()/doc-number]"/>
> 
> Or even better, use a key.
>

OK! but when I try

 <xsl:key name="ref-titles" match="exsl:node-set($sort-titles)/*" use="@doc-number"/>

Saxon throws an error:

"Error in expression exsl:node-set($sort-titles)/*: The only functions allowed in a pattern are id() and key()". 

I must be doing something wrong there?

Anton

The $ref variable works fine:

 <xsl:variable name="output">
  <xsl:variable name="ref" select="exsl:node-set($sort-titles)/*"/>
  <xsl:for-each select="//section-02">
   <xsl:sort select="$ref[@doc-number = current()/doc-number]"/>
   <xsl:sort select="number(concat(substring(arrival-date, 7,4),
    substring(arrival-date, 1,2), substring(arrival-date, 4,2)))"
    order="descending"/>
   <title doc-number="{doc-number}" title="{key('titles', doc-number)}" 
    description="{description}" arrival-date="{arrival-date}"/>
  </xsl:for-each>
 </xsl:variable>

Current Thread