RE: [xsl] problem with xsl:sort

Subject: RE: [xsl] problem with xsl:sort
From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx>
Date: Mon, 17 Feb 2003 23:46:55 -0000

> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx 
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of 
> Lorenzo De Tomasi
> Sent: 17 February 2003 23:17
> To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] problem with xsl:sort
> 
> 
> I have a problem with xsl:sort
> I have written this code 

    <xsl:for-each select=".">
    <xsl:sort select="@type" data-type="text" order="ascending"/>

<xsl:for-each select="."> processes a node-set that always contains
exactly one node. So there isn't very much point in sorting it.

Michael Kay
Software AG
home: Michael.H.Kay@xxxxxxxxxxxx
work: Michael.Kay@xxxxxxxxxxxxxx 


> ______________________________________________________________
> ______________
> XML
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <?xml-stylesheet type="text/xsl" href="contact_temp.xsl"?> 
> <xCVP xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> xmlns:a="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"
> xmlns:n="urn:oasis:names:tc:ciq:xsdschema:xNL:2.0" 
> xsi:schemaLocation="">
>     <PersonDetails lang="eng">
>         <Languages>
>             <Language type="other language" speak="good" 
> read="excellent" write="good" code="eng">English</Language>
>             <Language type="mother tongue" speak="excellent" 
> read="excellent" write="excellent" code="ita">Italiano</Language>
>             <Language type="other language" speak="basic" 
> read="basic" write="basic" code="fr">Fran?ßais</Language>
>         </Languages>
>     </PersonDetails>
> </xCVP> 
> ______________________________________________________________
> ______________
> XSL
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0" 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
> 
> <xsl:template match="xCVP/PersonDetails">
>     <html>
>         <body lang="eng">
>             <section>
>                 <h>languages</h>
>                 <p>
>                     <xsl:apply-templates select="Languages/Language"/>
>                 </p>
>             </section>
>         </body>
>     </html>
> </xsl:template>
> 
> <xsl:template match="PersonInfo">
>     <xsl:apply-templates/>
> </xsl:template>
> 
> <xsl:template match="Languages">
>     <xsl:apply-templates/>
> </xsl:template>
> 
> <xsl:template match="Language">
>     <xsl:for-each select=".">
>     <xsl:sort select="@type" data-type="text" order="ascending"/>
>         <xsl:choose>
>             <xsl:when test="@type='mother tongue'">
>                 <l><span class="label"><xsl:value-of 
> select="@type"/></span><xsl:text> </xsl:text><xsl:value-of 
> select="."/></l>
>             </xsl:when>
>             <xsl:otherwise>
>                 <l><span class="label"><xsl:value-of 
> select="@type"/></span><xsl:text> </xsl:text><xsl:value-of 
> select="."/><xsl:text> </xsl:text><span 
> class="label">speak</span><xsl:text>
> </xsl:text><xsl:value-of select="@speak"/><xsl:text> 
> </xsl:text><span class="label">read</span><xsl:text> 
> </xsl:text><xsl:value-of select="@read"/><xsl:text> 
> </xsl:text><span class="label">write</span><xsl:text> 
> </xsl:text><xsl:value-of select="@write"/></l>
>             </xsl:otherwise>
>         </xsl:choose>
>     </xsl:for-each>
> </xsl:template>
> 
> </xsl:stylesheet> 
> ______________________________________________________________
> ______________
> 
> and tested it in Netscape 7 for mac and the result is
> 
> ______________________________________________________________
> ______________
> RESULT
> 
> languages
> other language English speak good read excellent write good 
> mother tongue Italiano other language Français speak basic 
> read basic write basic 
> ______________________________________________________________
> ______________
> 
> As you can seen the result is not what I want. The lines are 
> not ordered by type attribute, but by xml order. Have I done 
> something wrong?
> 
> With xslt can I order a list created with xsl:for-each 
> specifying a precise order? i.e. I want to make a list and I 
> want to display first the items with attribute type="special 
> offer" in ascending order and then all the other ones by 
> ascending order.
> 
> XML
> <item type="special offer!">book</item>
> <item>book</item>
> ...
> 
> RESULT
> special offer! book $10
> special offer! cd $5
> special offer! doll $10
> book $20
> cd $10
> doll $20
> 
> Thank you very much! 
> ______________________________________________________________
> ______________
> Lorenzo De Tomasi, student of Information Architecture, 
> Interface Design and Visual Design via Bellaria 6, 21018 
> Sesto Calende (Varese), Italia
> phone: +39 (0)331 924649
> mobile: +39 329 3941065; +39 333 8979304
> e-mail: lorenzo.detomasi@xxxxxxxxx; lorenzo.detomasi@xxxxxxxx
> website: http://biografica.tzone.it
> ICQ uin: 11313132
> Yahoo! Instant Messenger id: tummait
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread