[Home] [By Thread] [By Date] [Recent Entries]
Hi all,
I'm trying to write a quick bit of code to loop through all the months of the year, and print a list of deadlines for each month. The grouping and printing the deadlines works, but instead of copying and pasting the <xsl:apply-templates/> block twelve times, I would like to iterate through a list of months. Unfortunately when I do this I use document('') to pull the list of months from the XSLT code itself, but this then stops anything inside the for-each block from being able to pull any further data from the main XML code. Does anyone know a way around this? There is some sample code demonstrating the problem below. Many thanks, Adam. --- begin loop.xsl --- <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:me="http://some.url"> <!-- Group items by numerical month (e.g. '02' in '2001-02-03') --> <xsl:key name="by-month" match="/items/item" use="substring(deadline, 6, 2)" /> <me:monthnames> <me:month>January</me:month> <me:month>February</me:month> <me:month>March</me:month> <me:month>April</me:month> <me:month>May</me:month> <!-- etc --> </me:monthnames> <xsl:template match="/items"> Use the list: (doesn't work) <xsl:for-each select="document('')//me:month">
<xsl:variable name="month" select="format-number(position(), '00')"/><p><xsl:value-of select="$month"/> - <xsl:value-of select="."/></p> <ul>
<!-- This template never gets applied -->
<xsl:apply-templates select="key('by-month', $month)">
<xsl:sort select="deadline"/>
</xsl:apply-templates>
</ul></xsl:for-each> Example hardcoded for May: (works) <ul>
<xsl:apply-templates select="key('by-month', '05')">
<xsl:sort select="deadline"/>
</xsl:apply-templates>
</ul></xsl:template> <xsl:template match="item"> <li><xsl:value-of select="name"/>: <xsl:value-of select="deadline"/></li> </xsl:template> </xsl:stylesheet>
<item>
<name>Item One</name>
<deadline>2008-01-01</deadline>
</item> <item>
<name>Item Two</name>
<deadline>2008-02-01</deadline>
</item> <item>
<name>Item Three</name>
<deadline>2008-05-03</deadline>
</item> <item>
<name>Item Four</name>
<deadline>2008-05-04</deadline>
</item></items>
|

Cart



