Re: sorting, xslt 2.0

"Michael Kay [email protected]" <[email protected]> Tue, 16 Mar 2021 16:28:34 -0000
Newsgroups gmane.text.xml.xsl.general.mulberrytech
Message-ID <[email protected]>
There's another option which I forgot about because I tend to prefer one of the others: compute the sort key in the body of xsl:sort:

>> <xsl:for-each select="term">
>>  <xsl: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:sort>

> On 16 Mar 2021, at 16:24, Michael Kay [email protected] <[email protected]> wrote:
> 
> 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]
--~--