I've been making attempts to sort/group via the Muenchian Method, but apparently I'm doing it wrong. I can't figure out what it is that I'm screwing up, and I've been working on this for days.
I'm trying to pull items out of a huge xml by their program id's, group by the document date, sort on this date, list the date, and then print all the relevant docs under that in alternating line colors.
Can anyone help me out? Thanks.
Sample part of XML
Code:
<item category="meeting">
<program id="prog1">program 1</program>
<docdate>20071026</docdate>
<title>"Welcome to Historic Downtown"</title>
<desc>"Welcome to Historic Downtown"</desc>
<xref>ftp://our.ftp.site/anftpdoc/historic.pdf</xref>
</item>
<item category="agenda">
<program id="prog1">program 1</program>
<program id="prog2">program 2</program>
<docdate>20070718</docdate>
<title>agenda</title>
<desc>agenda for July 18, 2007 Meeting</desc>
<xref>ftp://our.ftp.site/anftpdoc/agenda071807.pdf</xref>
</item>
Sample XSL:
Code:
<xsl:key name="sortdate" match="item" use="docdate"/>
<xsl:template match="/" name="groups">
<xsl:for-each select="//downloads/item[@category='meeting' or @category='agenda' or @category='summary']/program[@id='prog1'][generate-id(.)=generate-id(key('sortdate', ../docdate)[1])]">
<xsl:sort select="../docdate" order="ascending" data-type="number" />
<xsl:element name="h4">
<xsl:value-of select="../docdate" />
</xsl:element>
<xsl:for-each select="key('sortdate', ../docdate)">
<xsl:call-template name="populate" />
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<xsl:template name="populate">
<xsl:if test="position() mod 2 = 1">
<xsl:element name="tr">
<xsl:attribute name="style">background-color: #fff; border: 0</xsl:attribute>
<xsl:element name="td">
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="../xref" /></xsl:attribute>
<xsl:value-of select="../title" />
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:if>
<xsl:if test="position() mod 2 = 0">
<xsl:element name="tr">
<xsl:attribute name="style">background-color: #efe8df; border: 0</xsl:attribute>
<xsl:element name="td">
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="../xref" /></xsl:attribute>
<xsl:value-of select="../title" />
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:if>
</xsl:template>