|
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 |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] sorting titles w stopword, Michael Kay | Thread | Re: [xsl] sorting titles w stopword, David Carlisle |
| [xsl] Output method html, Kaarle Kaila | Date | Re: [xsl] sorting titles w stopword, David Carlisle |
| Month |