xsl-list
[Top] [All Lists]

Re: XSLT Sort and choose last items problem

2003-02-10 02:50:06
Hi Ned,

I currently use XSLT:
(Snippet:)
<xsl:for-each select="journal/year/month[last()]">
        <xsl:for-each select="day[position()>last()-5]">
                <xsl:sort order="descending" select="@date"/>
                <item>
                        <xsl:call-template name="item-contents"/>
                </item>
        </xsl:for-each>
</xsl:for-each>

This does not quite do what I want to do. This is because I am
unable to select the last 5 days when they span "month" elements.
For example, when the last day in the XML file is 2 Feb, I want to
select (in this order) 2 Feb, 1 Feb, 31 Jan, 30 Jan, and 29 Jan. I
can't figure out how to select the days from January.

Rather than having nested xsl:for-eaches to select first the month and
then the day, you should have one xsl:for-each that jumps straight to
the days. (If you need to get information about the month then you can
use the parent axis to do so.) There's also no need to do a sort since
the days are already in date order, so try:

  <xsl:for-each select="(journal/year/month/day)
                          [position() > last() - 5]">
    <item>
      <xsl:call-template name="item-contents"/>
    </item>
  </xsl:for-each>

Note that the brackets around journal/year/month/day ensure that
position() and last() in the predicate [position() > last() - 5]
applies to all the days in the journal rather than applying to the
days within a particular month.
  
Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


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