Re: sorting, xslt 2.0

"Michael Kay [email protected]" <[email protected]> Tue, 16 Mar 2021 16:24:49 -0000
Newsgroups gmane.text.xml.xsl.general.mulberrytech
Message-ID <[email protected]>
As David C and Martin suggest, write the sort key computation as a single XPath expression if you can.

In the rare cases where you can't, call out to a function: compute the sort key in a separate xsl:function, and call the function in xsl:sort/@select.

Michael Kay
Saxonica 

> On 16 Mar 2021, at 16:08, Dave Pawson [email protected] <[email protected]> wrote:
> 
> xml
> 
> <term>
> <fr sort="">sourire</fr>
> ...
>  </term>
> 
> context is term
> I want to sort on fr/@sort
>  or (if empty)
> <xsl:value-of select="(lower-case(substring(fr,1,1)))"/>
> 
> error XTSE0010 Within xsl:for-each, xsl:sort elements must come before
> other instructions
> 
>  <xsl:for-each select="term">
>   <xsl:variable name='sort'>
>    <xsl:choose>
>      <xsl:when test="fr/@sort">
> <xsl:value-of select="fr/@sort"/>
>      </xsl:when>
>      <xsl:otherwise>
> <xsl:value-of select="(lower-case(substring(fr,1,1)))"/>
> </xsl:otherwise>
>    </xsl:choose>
>    </xsl:variable>
> 
> 
> <xsl:sort select="$sort"/>
> 
> 
> Any suggestions for a workaround please?
> 
> TiA
> 
> 
> -- 
> Dave Pawson
> XSLT XSL-FO FAQ.
> Docbook FAQ.
> 
> 
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/3329386
or by email: [email protected]
--~--