[Home] [By Thread] [By Date] [Recent Entries]
Hi all,
I'm fairly new to XSLT and am having no end of difficulty sorting the data from the following XML: <resource day="04" live="200707040000" month="07" monthname="July" year="2007"> <title>Title 1</title> <section name="Articles"> <subsection>section 1</subsection> </section> </resource> <resource day="10" live="200701100000" month="01" monthname="January" year="2007"> <title>Competition: Commission energy sector inquiry confirms serious competition problems </title> <section name="News releases"> <subsection>section 1</subsection> </section> <section name="Articles"> <subsection>section 1</subsection> </section> </resource> and so on, for as many resources as there are. I have managed to sort the data by section and correspondingly by subsection, but now I am having problems drilling down through the navigation, to display all the years for each section (and subsection). The XSL I have done so far is rubbish, but here goes: <xsl:choose> <xsl:when test="$subsection = ''"> <xsl:for-each select="//section[@name=$section]"> <xsl:sort select="../@live" order="descending"/> <xsl:if test="not(parent::resource/following-sibling::resource/@year=parent::node()/@year)"> <li><!-- list item lives here --><xsl:value-of select="../@year"/></li> </xsl:if> </xsl:for-each> </xsl:when> <xsl:otherwise> <xsl:for-each select="//section[@name=$section][node()=$subsection]"> <xsl:sort select="../@live" order="descending"/> <xsl:if test="not(parent::resource/following-sibling::resource/@year=parent::node()/@year)"> <li><!-- list item lives here --><xsl:value-of select="../@year"/></li> </xsl:if> </xsl:for-each> </xsl:otherwise> </xsl:choose> Ideally it should produce a list of all years, so the user can browse the resources by year. All | 2008 | 2007 | 2006 etc Yup - it's gorgeous old XSLT 1.0 - I don't doubt there is a brilliant tag in XSLT 2.0 but hey ho. The problem seems to be that the following-sibling of the parent node doesn't return the next node in the for-each, but the next node in the main xml. So sometimes it returns no results at all because there's a following sibling in a node which it shouldn't be looking at. I'm sure I'm making a simple mistake, but for the life of me I can't figure out what it is. All help gratefully appreciated! Kate
|

Cart



