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

Re: expression syntax

Subject: Re: expression syntax
From: "Alan Divorty" <alan.divorty@xxxxxxxxxxxxxx>
Date: Sun, 14 Nov 2004 21:15:52 -0000
xsl date comparison
Thanks guys (incl.George James), but it just keeps failing when I try to
include the translate in the Select expression.

It was fine translating the input parameter into a new variable (as
suggested by George) and now I've cheated by re-speccing the xml file to
have dates without dashes, so it now works as required.

Alan

----- Original Message -----
From: "M. David Peterson" <m.david@xxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Sunday, November 14, 2004 11:16 AM
Subject: Re:  expression syntax


> Hey Alan,
>
> The two things to consider when using a XSLT 1.0 processor (MSXML3 or
> MSXML4 -- both are possibilities as far as what version of MSXML is on
> your system  -- are XSLT 1.0 processors):
>
> - There is no date comparison function.
> - In 1.0 there is type support for the 4 XPath data types - string,
> number, boolean, node-set.
>
> With this in mind your element date value of 2004-11-14 is viewed as a
> string, not a number.  So using &lt; = or > will return no possible
> matches for anything that is not a number.  In your case, given the
> order of your date entities you are in luck as you can simply use the
> translate() function to convert the '-' (dash) to '' (empty string or
> empty space, however you want to term it.  translate(date, '-', '') will
> accomplish this task.  This will then allow a simple type conversion
> from a string to a number by using the number funtion.  The simplest way
> to do this is to wrap the previous translate function inside the number
> function as so:  number(translate(date, '-', ''))
>
> To get the results you are looking for my suggestion would be to take
> the above conversion functions and use them within xsl:apply-templates,
> using the match attribute of a xsl:template element to match the 'date'
> element and make a copy of that particular nodes contents.  So something
> like this:
>
> <xsl:param name="date" select="'20041114'"/>
> <!-- NOTE: by using param instead of variable you allow yourself the
> ability to pass the value in from outside the template -->
>
> <xsl:template match="/">
>     <dates>
>         <xsl:apply-templates
> select="performance/date[number(translate(., '-', '')) &gt;= $today]"/>
>     </dates>
> </xsl:template>
>
> <xsl:template match="date">
>     <xsl:copy-of select="."/>
> </xsl:template>
>
> Should be much more effective for you in gaining access to the nodes
> that match your number based comparison.  NOTE: Something to keep in
> mind...  The translate function above will only make a copy of the
> string contained within the date element and use that for comparison.
> The actual value will retain its original '-' delimited string version.
> The matching template will make a copy of each matching element from the
> specified criteria (complete copy of the element, its attributes (if
> any), and its value).  So don't be surprised to see the dashes still in
> place when looking at your output.
>
> Hope this helps!
>
> <M:D/>
>
> Alan Divorty wrote:
>
> >I am trying to compare two dates, one in the xml data against an external
> >parameter holding today's date.
> >
> >The format of each is yyyy-mm-dd
> >
> ><xsl:for-each select="performance[date = $today]">
> >
> >successfully processes records with today's date.  However, I want to
select
> >all records equal to or later than today, but
> >
> ><xsl:for-each select="performance[date &gt;= $today]">  does not select
any
> >records.
> >
> >Is my syntax wrong?
> >
> >I'm using IE6 to process the files.
> >
> >Thanks,
> >Alan

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.