RE: [xsl] a sorting conundrum

Subject: RE: [xsl] a sorting conundrum
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 3 Mar 2005 15:52:12 -0000
As is so often the case, it's easy in 2.0:

<xsl:sort select="if (contains(., ' ')) then substring-after(., ' ') else
string(.)"/>

The only workaround I can think of for 1.0 is the "infinite-substring" hack.
This relies on the fact that if B is a boolean expression, then

substring(X, 1 div B, string-length(X))

returns [if (B) then X else ""] 

So you get something like

select="concat(
   substring(., 1 div (not(contains(., ' ')), string-length(X),
   substring(substring-after(., ' '), 1 div contains(., ' '),
string-length(X)))"/>

Michael Kay
http://www.saxonica.com/

 

> -----Original Message-----
> From: John Fitzgibbon [mailto:jfitzgibbon@xxxxxxxxxxxxxxxx] 
> Sent: 03 March 2005 15:32
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] a sorting conundrum
> 
> Hi,
> 
> I am attempting to sort an a list of personal names. All of the names
> consist of either a first name followed by a last name or of 
> a last name
> only (there are no middle names). Both parts of the name, 
> when present,
> are enclosed within the one tag (span) which has a class='person'
> attribute, the same tag is used to enclose a last name only. I am
> attempting to sort by last name like so
> 
> <xsl:for-each select="html/body//span[@class='person']">
> <xsl:sort select="substring-after(., ' ')"/>
> <xsl:sort select="."/>
> <xsl:sort select="substring-before(., ' ')"/>
> 
> The problem is that names consisting of a last name only 
> appear first in
> my alphabetical sequence and are sorted; these are followed by names
> with a first name and a last name and these are also sorted. I require
> one alphabetical list rather than two.
> 
> Can this be done in one fell swoop, without having to write 
> an XSL style
> sheet for the file consisting of two alphabetical sequences?
> 
> Any suggestions would be most welcome.
> 
> Regards
> John
> 
> John Fitzgibbon
> 
> Galway Public Library
> Island House
> Cathedral Square
> Galway
> Ireland
> 
> p: 00 353 91 562471
> f: 00 353 91 565039
> w: http://www.galwaylibrary.ie 
> 
> ******************************************************************* 
> Ta eolas ata prmobhaideach agus rznda sa rmomhphost seo 
> agus aon iatan a ghabhann leis agus is leis an duine/na daoine
> sin amhain a bhfuil siad seolta chucu a bhaineann siad. 
> Mura seolam thz, nml tz zdaraithe an rmomhphost ns aon iatan 
> a ghabhann leis a liamh, a chsipail na a zsaid. 
> Ma ta an rmomhphost seo faighte agat trm dhearmad, 
> cuir an seoltsir ar an eolas thrm aischur rmomhphoist 
> agus scrios ansin i le do thoil. 
> 
> This e-mail and any attachment contains information which is 
> private and confidential and is intended for the addressee 
> only. If you are not an addressee, you are not authorised 
> to read, copy or use the e-mail or any attachment. 
> If you have received this e-mail in error, please notify 
> the sender by return e-mail and then destroy it. 
> *********************************************************************

Current Thread