[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] Select item from schedule based on date in XPath 1.0


Subject: Re: [xsl] Select item from schedule based on date in XPath 1.0
From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 30 Jul 2014 16:11:33 -0000

On Wed, Jul 30, 2014 at 7:00 AM, Philipp Kursawe
phil.kursawe@xxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
wrote:
> I am using XPath 1.0 so for the date comparison itself I use this trick:
> number(translate(@startTime, "-T:.Z", ""))
> to get a number representation for the startTime attibute.



Simply removing the non-digit characters will not, in general, be
correct, especially in the case when the timezone values are
different.

If you can completely ignore the timezones, this XPath expression:

     /*/*[translate(substring-before(substring-after(@startTime, 'T'),
'.'), ':', '')
        &lt;
          100*translate($vMyTime, ':', '')
          ]
           [last()]

selects the item element with the wanted value of the startTime attribute.

To prove this, one can run a transformation as the following:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="vMyTime" select="'11:15'"/>
 <xsl:template match="/">
   <xsl:copy-of select="
     /*/*[translate(substring-before(substring-after(@startTime, 'T'),
'.'), ':', '')
        &lt;
          100*translate($vMyTime, ':', '')
          ]
           [last()]
     "/>
 </xsl:template>
</xsl:stylesheet>


When this transformation is applied on the provided XML document
(corrected to be wellformed):

<daily>
 <item startTime="2014-07-26T10:00:00.000Z"/>
 <item startTime="2014-07-26T11:00:00.000Z"/>
 <item startTime="2014-07-26T12:00:00.000Z"/>
 <item startTime="2014-07-26T13:00:00.000Z"/>
</daily>

the wanted result is produced:

<item startTime="2014-07-26T11:00:00.000Z" />


-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
To achieve the impossible dream, try going to sleep.
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they
write all patents, too? :)
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.


Current Thread
Keywords