xsl-list
[Top] [All Lists]

Re: Natural Sort

2006-01-25 04:03:23

me> You could in XSLT2, in XSLT1 you could do:

To be more explict


starting from here

<x>
<server dn="members10.mysite.com" id="Server491" os="FreeBSD 4.11"/>
<server dn="media2.mysite.com" id="Server488" os="Fedora Core 1"/>
<server dn="media10.mysite.com" id="Server433" os="Fedora Core 1"/>
<server dn="members1.mysite.com" id="server322" os="Debian Linux"/>
<server dn="members2.mysite.com" id="Server435" os="Fedora Core 2"/>
<server dn="media1.mysite.com" id="server392" os="FreeBSD 5.1"/>
</x>


The following stylesheet shows two ways of getting to

      <server dn="media1.mysite.com" id="server392" os="FreeBSD 5.1"/>
      <server dn="media2.mysite.com" id="Server488" os="Fedora Core 1"/>
      <server dn="media10.mysite.com" id="Server433" os="Fedora Core 1"/>
      <server dn="members1.mysite.com" id="server322" os="Debian Linux"/>
      <server dn="members2.mysite.com" id="Server435" os="Fedora Core 2"/>
      <server dn="members10.mysite.com" id="Server491" os="FreeBSD 4.11"/>


The first way would also work in XSLT1, the second way uses xpath2
regexp to sort media1 as media01.

David

 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
version="2.0">
<xsl:output indent="yes" omit-xml-declaration="yes"/>

<xsl:template match="x">
<x>
  <a>
    <xsl:for-each select="server">
      <xsl:sort
          select="translate(substring-before(@dn, '.'),'0123456789','')"
          data-type="text"
          order="ascending"/>
      <xsl:sort
          select="translate(substring-before(@dn, 
'.'),'abcdefghijklmnopqrstuvwxyz','')"
          data-type="number"
          order="ascending"/>
      <xsl:copy-of select="."/>
    </xsl:for-each>
  </a>
  <b>
    <xsl:for-each select="server">
      <xsl:sort select="replace(@dn,'([^0-9])([0-9])([^0-9])','$10$2$3')"/>
      <xsl:copy-of select="."/>
    </xsl:for-each>
  </b>
</x>
</xsl:template>

 
</xsl:stylesheet>

________________________________________________________________________
This e-mail has been scanned for all viruses by Star. The
service is powered by MessageLabs. For more information on a proactive
anti-virus service working around the clock, around the globe, visit:
http://www.star.net.uk
________________________________________________________________________

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



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