Suppose today's date is : 11-sept-2013
Now we have to show the single event which is nearest to come.
In xml, each 'item' node defines Event. In the below xml 'item' node have title 'today2' has the nearest date from today.
so, we have to show this single node as a upcoming event.
datetime.xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
<item>
<title>oct-18</title>
<Date>2013-10-18 00:00:00</Date>
</item>
<item>
<title>today2</title>
<Date>2013-09-11 10:00:00</Date>
</item>
<item>
<title>aug-10</title>
<Date>2013-08-10 00:00:00</Date>
</item>
<item>
<title>today1</title>
<Date>2013-09-11 11:00:00</Date>
</item>
<item>
<title>tomorrow</title>
<Date>2013-09-12 00:00:00</Date>
</item>
</root>
XSLT :
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:myExtension="urn:myExtension"
exclude-result-prefixes="msxsl myExtension">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<msxsl:script implements-prefix="myExtension" language="C#">
<![CDATA[
public double gets(string date)
{
DateTime dt1=Convert.ToDateTime(date);
DateTime dt2 = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 00:00:00"));
double i= dt1.Subtract(dt2).TotalDays;
return i;
}
]]>
</msxsl:script>
<xsl:template match="root">
<ul>
<xsl:for-each select="item[myExtension:gets(Date)>=0]">
<xsl:sort select ="myExtension:gets(Date)" order="ascending" data-type ="number"/>
<xsl:choose>
<xsl:when test="position()='1'">
<!-- check postion for the first node-->
<xsl:value-of select ="title"/> ||||
<xsl:value-of select ="Date"/>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</ul>
</xsl:template>
</xsl:stylesheet>
OUTPUT :
today2 |||| 2013-09-11 10:00:00
No comments:
Post a Comment