xsl-list
[Top] [All Lists]

RE: Need help with special sorting

2004-06-28 01:26:37

What a neat solution!  Is this your own invention Ken or is this common
knowledge?


At 2004-06-27 20:16 +0200, Bert wrote:
I need some help with 'special sorting'.
I have this xml-file (simplified).

<alfabet>
        <letter>a</letter>
        <letter>b</letter>
        <letter>c</letter>
        <letter>d</letter>
</alfabet>

The outcome after sorting should however be this:
a b d c

The letter c has always to be the last item after sorting.
How can I achieve this?

By translating the letters you have into the letter-order you 
want sorted 
for the purposes of calculating the collation string for each 
member of the 
sort.

I hope the example below helps.

................ Ken

T:\ftemp>type bert.xml
<alfabet>
         <letter>a</letter>
         <letter>b</letter>
         <letter>c</letter>
         <letter>d</letter>
</alfabet>

T:\ftemp>type bert.xsl
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE xsl:stylesheet [
   <!ENTITY given  'abcdefghijklmnopqrstuvwxyz'>
   <!ENTITY needed 'abzcdefghijklmnopqrstuvwxy'>
]>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                 version="1.0">

<xsl:output method="text"/>

<xsl:template match="/">
   <xsl:for-each select="/*/letter">
     <xsl:sort select="translate(.,'&given;','&needed;')"/>
     <xsl:value-of select="."/>
     <xsl:text>
</xsl:text>
   </xsl:for-each>
</xsl:template>

</xsl:stylesheet>
T:\ftemp>saxon bert.xml bert.xsl
a
b
d
c

T:\ftemp>


<Prev in Thread] Current Thread [Next in Thread>