Subject: [xsl] Re: Re: xpath for getting file version From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Wed, 15 Aug 2001 06:22:33 -0700 (PDT) |
Jeni Tennison wrote: [snip] > > When it comes down to it, this is a problem of finding a calculated > maximum within an XPath. I think you have at least four options. > First, you could index the files by all their versions and worry about > which is latest later on. So use the key: > > <xsl:key name="file-version" match="file" use="versions/version" /> > > and then when you're processing the files that you retrieve using the > key, filter out those that have been retrieved through an early > version. > Second, you could have a two-stage process (either with two > stylesheets or using a node-set() extension function to do it all in > one stylesheet). In the first pass, construct XML like the above, with > a date attribute giving the entire date, and then use the XPath above > in the key. > Third, you could use an extension function for finding nodes with > the highest values based on an expression, if your processor offers > one. If you use Saxon, you could do: > > <xsl:key name="file-version" match="file" > use="saxon:highest(versions/version, > saxon:expression('concat(@year, @month, > @day)'))" /> > > Finally, you could write your own extension function to find the latest > version of a file. With the EXSLT mechanism, it could look like: > > <func:function name="my:latest-version"> > <xsl:for-each select="versions/version"> > <xsl:sort select="concat(@year, @month, @day)" > data-type="number" order="descending" /> > <xsl:if test="position() = 1"> > <func:result select="@name" /> > </xsl:if> > </xsl:for-each> > </func:function> > > (or you could write a recursive function if speed was an issue) > > In a processor that supports EXSLT - Functions (Saxon or 4XSLT), you > could do: > > <xsl:key name="file-version" match="file" use="my:latest-version()" /> > > I hope that helps, > > Jeni It would help much more to know that there is another way of finding any maximum. This, as Jeni knows well, is to use a generic template. Contrasted to half of the solutions above, the generic max() template, which can be downloaded at http://vbxml.com/downloads/default.asp?id=v2001611171627 is 100% pure XSLT and does not require the stylesheet programmer to be bound to use a particular XSLT processor or to write any extension functions, which again will make the stylesheet non-portable. The current state of EXSLT as I see it, just clearly proves the need to have a good 100% pure XSLT template library. Ideally we could have a standard XSLT template library developed by the W3 consortium (as contrasted by any initiative of small and not quite representative group of people). Hope this helped. Cheers, Dimitre Novatchev. --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list -------------------------------------------------------------------------------- References: xpath for getting file version From: Antony Suryadinata Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index] Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next] __________________________________________________ Do You Yahoo!? Make international calls for as low as $.04/minute with Yahoo! Messenger http://phonecard.yahoo.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Creating a white-space se, Mark Galbreath | Thread | Re: [xsl] Re: Re: xpath for getting, Jeni Tennison |
Re: [xsl] Creating a white-space se, Aleksei Valikov | Date | Re: [xsl] Re: XSL Literature, Robert Koberg |
Month |