RE: [xsl] URGENT!!PROG-TIME

Subject: RE: [xsl] URGENT!!PROG-TIME
From: Jeff Beadle <Jbeadle@xxxxxxxx>
Date: Mon, 4 Mar 2002 15:13:58 -0500
Hey William,

This will get you the ordering you want:

<xsl:template match="programs">
	<xsl:for-each select="program">
		<xsl:sort data-type="text" select="ampm"/>
		<xsl:sort data-type="text" select="time"/>
		<xsl:copy-of select="."/>
	</xsl:for-each>
</xsl:template>


You could turn this into called templates, one for the 
first half of the day and one for the other.

This approach is fairly specific to your use case: 

<xsl:template match="/">

   First half:
   <xsl:call-template name="first-half-of-day">
	<xsl:with-param name="programs" select="//programs"/>
   </xsl:call-template>

   Second half:
   <xsl:call-template name="second-half-of-day">
	<xsl:with-param name="programs" select="//programs"/>
   </xsl:call-template>
</xsl:template>

<xsl:template name="first-half-of-day">
	<xsl:param name="programs"/>
	<xsl:for-each select="msxsl:node-set($programs)/program">
		<xsl:sort data-type="text" select="ampm"/>
		<xsl:sort data-type="text" select="time"/>
		<xsl:variable name="dt">
			<xsl:call-template name="GetDateTime">
				<xsl:with-param name="program" select="."/>
			</xsl:call-template>
		</xsl:variable>
		<xsl:if test="(600 &lt;= number($dt)) and (number($dt) &lt;
1500)">
			<xsl:copy-of select="."/>
		</xsl:if>
	</xsl:for-each>
</xsl:template>

<xsl:template name="second-half-of-day">
	<xsl:param name="programs"/>
	<xsl:for-each select="msxsl:node-set($programs)/program">
		<xsl:sort data-type="text" select="ampm"/>
		<xsl:sort data-type="text" select="time"/>
		<xsl:variable name="dt">
			<xsl:call-template name="GetDateTime">
				<xsl:with-param name="program" select="."/>
			</xsl:call-template>
		</xsl:variable>
		<xsl:if test="(1500 &lt;= number($dt)) or (number($dt) &lt;
600)">
			<xsl:copy-of select="."/>
		</xsl:if>
	</xsl:for-each>
</xsl:template>

<xsl:template name="GetDateTime">
	<xsl:param name="program"/>
	<xsl:variable name="dt">
		<xsl:for-each select="msxsl:node-set($program)">
		<dt>
			<xsl:value-of select="translate(time,':','')"/>
		</dt>
		<dt>
			<xsl:choose>
				<xsl:when test="'am'=ampm">0</xsl:when>
				<xsl:otherwise>
					<xsl:choose>
						<xsl:when 
                     test="substring-before(time,':') !=
'12'">1200</xsl:when>
	
<xsl:otherwise>0</xsl:otherwise>
					</xsl:choose>
				</xsl:otherwise>
			</xsl:choose>
		</dt>
		</xsl:for-each>
	</xsl:variable>
	<xsl:value-of select="sum(msxsl:node-set($dt)//dt)"/>
</xsl:template>


hope this helps,
Jeff


-----Original Message-----
From: William Rutford [mailto:vsd18@xxxxxxxxxxxxxx]
Sent: Monday, March 04, 2002 2:06 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: [xsl] URGENT!!PROG-TIME


I am still not able to crack the problem..
here is the problem..
SOMEBODY PLEASE HELP!!

hi i have a problem i am not able to crack!!

I have an xml file that looks like this

<programs>
<program id = '1'>
  <time>06:00</time>
  <ampm>pm</ampm>
  <title>Prog at 6 pm</title>
</program>
<program id = '2'>
  <time>07:00</time>
  <ampm>am</ampm>
  <title>Prog at 7 am</title>
</program>
<program id = '3'>
  <time>09:30</time>
  <ampm>pm</ampm>
  <title>Prog at 9:30 pm</title>
</program>
<program id = '4'>
  <time>10:00</time>
  <ampm>am</ampm>
  <title>Prog at 10 am</title>
</program>
</programs>
I am required to arrainge this data in an HTML file in such a 
way
that the programs between 06:00am to 3:00 pm is placed in the
first half of the HTML page and the programs between 3:00pm and
6:00am are placed in the second half of the page.
and these times in the xml file is not ordered.. so when
arrainging them in HTML, it should also be seen that it is done 
in
chronological order..

example out put html looks like this:

07:00am: Program at 7 am
10:00am: Program at 10 am


06:00pm: Program at 6 pm
09:30am: Program at 9:30am


to add to the problem, the only way to check the time is through
the combination of the <time> and <ampm>..

I am really not able to crack this down.Can somebody help me??

MAny Thanks




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

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


Current Thread