[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Re: Re: Node Selection

Subject: Re: Re: Re: Node Selection
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Fri, 15 Jun 2001 12:18:49 -0700 (PDT)
xpath date time select nodes
OOppss...
>    <xsl:value-of select="concat($n1/Date, $n1/Time) 
>                           > 
>                          concat($n1/Date, $n1/Time) " />
                                  ^^^       ^^^
Must be:

    <xsl:value-of select="concat($n1/Date, $n1/Time) 
                           > 
                          concat($n2/Date, $n2/Time) " />


Dimitre Novatchev.



--- Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote:
> Hi Jeni,
> Moving from O(N*Log2(N)) to just O(N)is a great step forward.
> 
> Now I understand that you didn't offer this solution, because someone had just
> said
> he "i felt afraid, when i saw jeni's example"... 
> 
> So, the next step will make your solution also look quite simple -- and you know
> what this step is -- stop writing customised max() templates on every occasion and
> use just one generic max() template. I'm just quoting one of your messages, with
> small adjustments:
> 
> <date-timeMax:max />
> 
> <xsl:template match="/">
>   <xsl:text>Maximum value is: </xsl:text>
>   <xsl:apply-templates select="document('')/*/date-timeMax:max)" >
>     <xsl:with-param name="nodeset" select="//Activity"/>
>   </xsl:apply-templates>
> </xsl:template>
> 
> <xsl:template match="date-timeMax:max">
>    <xsl:param name="nodes" select="/.."/>
>    <xsl:param name="n1" select="/.."/>
>    <xsl:param name="n2" select="/.."/>
>    <xsl:value-of select="concat($n1/Date, $n1/Time) 
>                           > 
>                          concat($n1/Date, $n1/Time) " />
> </xsl:template>
> 
> Cheers,
> Dimitre Novatchev.
> 
> 
> --- Jeni Tennison <mail@xxxxxxxxxxxxxxxx> wrote:
> > Dimitre Novatchev wrote:
> > >> > I am using Xalan for xsl transformations. I have some xml with
> > >> > multiple <Activity> nodes in it for each part that is processed. The
> > >> > activity nodes are not sorted in any way in the xml. I want to
> > >> > select only the latest activity (by Date, Time) to process in the
> > >> > transform for my output to show the last activity scan on this part
> > >> > and ignore all other activity scans.
> > >> 
> > >> The easiest way to do this is to sort the Activity elements by their
> > >> Date and Time (in descending order), and then choose the first one
> > >> only to go on and process:
> > [snip]
> > >
> > > This is one of the most inefficient ways to find a maximum and Jeni
> > > must know it. In case there are thousands of nodes to be sorted, the
> > > unnecessary wait will be due exactly to following such an advice.
> > 
> > Well I did say *easiest* rather than *most efficient* ;)
> > 
> > Jim, if you have lots of Activity elements and find that your
> > transformation is unacceptably slow, then you could alternatively
> > use a recursive template.  This finds the next following Activity that
> > occurs after this one, and if there is one then applies templates to
> > it in 'latest' mode, and so on recursively through the Activity
> > elements.  If there isn't one, it applies templates to the Activity so
> > you can go on and process it.
> > 
> > <xsl:template match="Activity" mode="latest">
> >    <xsl:variable name="date-time" select="concat(Date, Time)" />
> >    <xsl:variable name="next"
> >                  select="following-sibling::Activity
> >                             [concat(Date, Time) > $date-time][1]" />
> >    <xsl:choose>
> >       <xsl:when test="$next">
> >          <xsl:apply-templates select="$next" mode="latest" />
> >       </xsl:when>
> >       <xsl:otherwise>
> >          <xsl:apply-templates select="." />
> >       </xsl:otherwise>
> >    </xsl:choose>
> > </xsl:template>
> > 
> > To kick this process off, you need to apply templates to the first
> > Activity element in your Part, in 'latest' mode:
> > 
> > <xsl:template match="Part">
> >    <xsl:apply-templates select="Activity[1]" mode="latest" />
> > </xsl:template>
> > 
> > [Caveat: this template will involve very deep recursion, which might
> > still be a problem on some processors (including Xalan, I believe), if
> > you're unlucky with the ordering of your Activity elements. It also
> > assumes that processors are smart enough to optimise XPath expressions
> > that end in a [1] predicate, and to therefore stop when they find the
> > first node in the path, but that shouldn't be a problem in Xalan.]
> > 
> > Cheers,
> > 
> > Jeni
> > 
> > ---
> > Jeni Tennison
> > http://www.jenitennison.com/
> > 
> > 
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Spot the hottest trends in music, movies, and more.
> http://buzz.yahoo.com/


__________________________________________________
Do You Yahoo!?
Spot the hottest trends in music, movies, and more.
http://buzz.yahoo.com/

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.