[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Sorting on a transformed string?

Subject: Re: Sorting on a transformed string?
From: David Carlisle <davidc@xxxxxxxxx>
Date: Tue, 29 Oct 2002 10:25:33 GMT
sort icollection


>    From: Scott Bronson <bronson@xxxxxxxxxxx>
>    Date: 26 Oct 2002 09:57:54 -0700
> 
>    Hello.  A sort problem is stumping me right now.  I've got the following
>    nodes:
> 
>        <Member name="CreateInstance">
>        <Member name="System.Caption.Insert">
>        <Member name="System.Collections.ICollection.Count"
> 
>    I'd like to sort them by name, without leading namespace:
> 
>        Count, CreateInstance, Insert
> 
>    Then I'd like to output them, WITH the namespace:
> 
>        System.Collections.ICollection.Count
>        CreateInstance
>        System.Caption.Insert
> 
>    Normally, I use leaf-name (below) to trim the namespace.  However, I
>    suspect it's impossible to get sort to use a named template, and I
>    haven't figured out any other way of figuring out the leaf name.
> 
>    Is possible to sort on the leaf name?  Is it possible in XML 1.0?  :)
> 
>    Thank you!
> 
>        - Scott






<x>
    <Member name="CreateInstance"/>
    <Member name="System.Caption.Insert"/>
    <Member name="System.Collections.ICollection.Count"/>
</x>






<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
>

<xsl:template match="x">
<xsl:for-each select="Member">
<xsl:sort select="concat(
 substring-after(substring-after(substring-after(@name,'.'),'.'),'.')  ,
 substring-after(substring-after(@name[not(contains(substring-after(substring-after(.,'.'),'.'),'.'))],'.'),'.') ,
substring-after(@name[not(contains(substring-after(.,'.'),'.'))],'.') ,
@name[not(contains(.,'.'))]  )"/>

member: <xsl:value-of select="@name"/>
sorted by: <xsl:value-of select="concat(
 substring-after(substring-after(substring-after(@name,'.'),'.'),'.')  ,
 substring-after(substring-after(@name[not(contains(substring-after(substring-after(.,'.'),'.'),'.'))],'.'),'.') ,
substring-after(@name[not(contains(substring-after(.,'.'),'.'))],'.') ,
@name[not(contains(.,'.'))]  )"/>

</xsl:for-each>

</xsl:template>

</xsl:stylesheet>




$ saxon sort.xml sort.xsl
<?xml version="1.0" encoding="utf-8"?>

member: System.Collections.ICollection.Count
sorted by: Count

member: CreateInstance
sorted by: CreateInstance

member: System.Caption.Insert
sorted by: Insert


David






_____________________________________________________________________
This message has been checked for all known viruses by Star Internet
delivered through the MessageLabs Virus Scanning Service. For further
information visit http://www.star.net.uk/stats.asp or alternatively call
Star Internet for details on the Virus Scanning Service.

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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.