Subject: RE: [xsl] Yet Another Sorting Problem From: "Michael Kay" <mhk@xxxxxxxxx> Date: Wed, 28 Jul 2004 16:59:30 +0100 |
This is yet another problem that's easy in XSLT 2.0 but quite hard in 1.0. In 2.0 you can calculate the sort key by calling a stylesheet function, or by instructions inside the xsl:sort element: <xsl:sort> <xsl:for-each ... </xsl:for-each> </xsl:sort> In 1.0 it's probably simplest to calculate the sort key in a first pass, storing it as an attribute on the temporary tree, then do the sorting in a second pass. Michael Kay > -----Original Message----- > From: Allin Cottrell [mailto:cottrell@xxxxxxx] > Sent: 28 July 2004 16:17 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Yet Another Sorting Problem > > I've consulted the FAQ, but I'm having difficulty > extrapolating to the > answer to this one. > > In sorting a bibliography, I want to sort the elements (e.g. books, > articles) by author's name and publication date. OK, that's easy. > My problem is handling multiple authors, with the the number unknown > in advance. For flexibility in formatting the authors' names I can't > have them all in one big string; the data-structure I > actually have is > this: > > * each bibliography-entry element has an "authorlist" element. > * an authorlist has one or more "author" elements, which have > attributes such as surname, fist name, initials. > > The easy solution, if it were available, would be to wrap the > xsl:sort > selection code in an xsl:for-each ranging across the authors in an > entry's authorlist, but that's forbidden by xsl syntax. > > Next thought: construct on the fly a "grand author string" by lumping > together the names and initials of all the authors in an entry's > authorlist, and use this as the sort key for the entries. > > Seems promising, but I haven't managed to implement it. What I have > so far is broken -- I realize I can't use xsl:attribute to do this, > but I'm not sure what I should be using. > > <xsl:template match="bibliography"> > <xsl:for-each select="book|journalarticle|paper"> > <xsl:attribute name="auhash"> > <xsl:for-each select="authorlist/author"> > <xsl:value-of select="@surname"/> > <xsl:value-of select="@initials"/> > </xsl:for-each> > </xsl:attribute> > </xsl:for-each> > <xsl:apply-templates select="book|journalarticle|paper"> > <xsl:sort select="@auhash"/> > <xsl:sort select="pubdate"/> > </xsl:apply-templates> > </xsl:template> > > -- > Allin Cottrell > Department of Economics > Wake Forest University, NC
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Yet Another Sorting Problem, Allin Cottrell | Thread | Re: [xsl] Yet Another Sorting Probl, Mukul Gandhi |
Re: [xsl] DocBook to plain text - w, Wendell Piez | Date | RE: [xsl] Another grouping problem, Michael Kay |
Month |