RE: [xsl] Integrated sort using different elements

Subject: RE: [xsl] Integrated sort using different elements
From: "Houghton,Andrew" <houghtoa@xxxxxxxx>
Date: Thu, 19 Feb 2009 10:30:53 -0500
> From: G. Ken Holman [mailto:gkholman@xxxxxxxxxxxxxxxxxxxx]
> Sent: Thursday, February 19, 2009 10:20 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Integrated sort using different elements
>
> At 2009-02-19 09:09 -0600, Quinn Dombrowski wrote:
> >I'm trying to figure out a way to sort by one of multiple elements,
> >with descending priority.
>
> You create a select expression that chooses the element you want in
> the presence or absence of other items.
>
> >I'm working with a TEI bibliography, and there's no single element
> >that all the entries have. Ideally, I'd like to sort by
> >monogr/author; but when that's not possible, by analytic/author; if
> >not that, monogr/editor; then monogr/title; and so on down the line.
>
> In XSLT 2.0, choose the first item in a sequence of many items,
> priority indicated by the order of your sequence:
>
> <xsl:sort select="
>   ( monogr/author, analytic/author, monogr/editor, monogr/title )[1]"/>
>
> In XSLT 1.0 you might do something along the lines of:
>
> <xsl:sort select="
>    monogr/author |
>    self::*[not(monogr/author)]/analytic/author |
>    self::*[not(monogr/author | analytic/author)]/monogr/editor |
>    self::*[not(monogr/author | analytic/author |
> monogr/editor)]/monogr/title"/>

I think for XSLT 1.0 you can simplify that select to:

<xsl:sort select="(monogr/author|analytic/author)[1]"/>

which should also work in XSLT 2.0 without using a sequence.


Andy.

Current Thread