xml - XSLT 1.0: find the maximum value from given date and time -


hi all,
have xml event in following format (month,date,year,hour,minute,seconds am/pm). mention that, don't have control on generated xml. need find maximum or latest "dateevent" , select corresponding "eventname". xml looks like

                            <?xml version="1.0"  standalone="no"?>                             <day>                                 <day-event>                                     <eventname>test1</eventname>                                     <dateevent>1/30/2014 7:15:50 am</dateevent>                                 </day-event>                                 <day-event>                                     <eventname>test2</eventname>                                     <dateevent>4/29/2015 6:55:58 pm</dateevent>                                 </day-event>                                 <day-event>                                     <eventname>test3</eventname>                                     <dateevent>12/29/2014 9:33:24 pm</dateevent>                                 </day-event>                             </day> 

in xml have select latest "dateevent"(ie) 4/29/2015 6:55:58 pm , select corresponding "eventname"(ietest2). suggestions on how this..? application uses sax parser make transformation. tried sorting approach wasn't successful. result should

eventname 4/29/2015 6:55:58 pm

any suggestions on how approach ?

thanks

xslt 1.0 has no concept of dates (and xslt 2.0 recognize dates in iso-8601 format). need in 2 steps:

  1. convert dates sortable string in form of yyymmddhhmmss. further complicated necessity convert 12-hour time 24-hour format.
  2. sort resulting nodes , output first (or last, depending on sort order) 1 of these.

xslt 1.0

<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/xsl/transform"  xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl"> <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>  <xsl:template match="/day">     <!-- first pass -->     <xsl:variable name="events">         <xsl:for-each select="day-event">             <event name="{eventname}" date="{dateevent}">                 <xsl:call-template name="convert-date">                     <xsl:with-param name="datestring" select="dateevent"/>                 </xsl:call-template>             </event>         </xsl:for-each>     </xsl:variable>     <!-- output -->     <output>         <xsl:for-each select="exsl:node-set($events)/event">             <xsl:sort select="." order="descending"/>             <xsl:if test="position()=1">                 <eventname>                     <xsl:value-of select="@name" />                 </eventname>                 <dateevent>                     <xsl:value-of select="@date" />                 </dateevent>             </xsl:if>         </xsl:for-each>     </output> </xsl:template>  <xsl:template name="convert-date">     <xsl:param name="datestring"/>      <xsl:variable name="date" select="substring-before($datestring, ' ')" />     <xsl:variable name="time" select="substring-before(substring-after($datestring, ' '), ' ')" />      <xsl:variable name="m" select="substring-before($date, '/')" />     <xsl:variable name="d" select="substring-before(substring-after($date, '/'), '/')" />     <xsl:variable name="y" select="substring-after(substring-after($date, '/'), '/')" />      <xsl:variable name="h12" select="substring-before($time, ':')"/>     <xsl:variable name="m" select="substring-before(substring-after($time,':'), ':')"/>     <xsl:variable name="s" select="substring-after(substring-after($time,':'), ':')"/>      <xsl:variable name="pm" select="contains($datestring,'pm')"/>         <xsl:variable name="h" select="$h12 mod 12 + 12*$pm"/>      <xsl:value-of select="format-number($y, '0000')" />     <xsl:value-of select="format-number($m, '00')" />     <xsl:value-of select="format-number($d, '00')" />     <xsl:value-of select="format-number($h, '00')" />     <xsl:value-of select="format-number($m, '00')" />     <xsl:value-of select="format-number($s, '00')" /> </xsl:template>  </xsl:stylesheet> 

result

?xml version="1.0" encoding="utf-8"?> <output>   <eventname>test2</eventname>   <dateevent>4/29/2015 6:55:58 pm</dateevent> </output> 

Comments

Popular posts from this blog

Email notification in google apps script -

c++ - Difference between pre and post decrement in recursive function argument -

javascript - IE11 incompatibility with jQuery's 'readonly'? -