This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Sort-grouping problem


Hello all,

I have a problem both sorting and grouping...
I can sort and I can group (using following two templates), but I can't 
manage to do both and I have been at it for 5 hours now, so now I appeal to 
you for help.

I have the folling XML:

<NewsList>
  <Meta attributeA="AnAttribute">
    <One>Just MetaData</One>
    <Two>Not important here</Two>
  </Meta>
  <List>
    <News NewsType="1"><Date>03-02-2002</Date><P1>This is a newsletter or 
some such</P1><P2>The News</P2><P3>More News</P3>
    </News>
    <News NewsType="2"><Date>03-02-2002</Date><P1>This is a newsletter or 
some such</P1><P2>The News</P2><P3>More News</P3>
    </News>
    <News NewsType="2"><Date>06-02-2002</Date><P1>This is a newsletter or 
some such</P1><P2>The News</P2><P3>More News</P3>
    </News>
    <News NewsType="2"><Date>04-02-2002</Date><P1>This is a newsletter or 
some such</P1><P2>The News</P2><P3></P3>
    </News>
    <News NewsType="2"><Date>05-02-2002</Date><P1>This is a newsletter or 
some such</P1><P2>The News</P2><P3></P3>
    </News>
    <News NewsType="2"><Date>04-02-2002</Date><P1>This is a newsletter or 
some such</P1><P2>The News</P2><P3>The above P3 tags where empty</P3>
    </News>
    <News NewsType="2"><Date>01-02-2002</Date><P1>This is a newsletter or 
some such</P1><P2>The News</P2><P3>Yet more News</P3>
    </News>
  </List>
</NewsList>

I can sort it by Date using simple stylesheet like this:

<xsl:template match="/">
  <xsl:apply-templates select="NewsList"/>
<xsl:template>

<xsl:template match="NewsList">
  <xsl:apply-templates select="List"/>
<xsl:template>

<xsl:template match="List">
  <xsl:apply-templates select="News">
    <xsl:sort select="substring(Date,7,4)" data-type="number" 
order="ascending"/>
    <xsl:sort select="substring(Date,5,2)" data-type="number" 
order="ascending"/>
    <xsl:sort select="substring(Date,1,2)" data-type="number" 
order="ascending"/>
  </xsl:applye-templates>
<xsl:template>

<xsl:template match="News"/>
  <H1><xsl:value-of select="P1"/></H1>
  <!-- Other such stuff here (such as telling which date the news are from 
-->
</xsl:template>


I can also group by Date using following (taken from XSLT programmers 
reference 2.0 p.622ff):

<xsl:template match="/">
  <xsl:call-template name="group-by-date"/>
</xsl:template>

<xsl:template name="group-by-date">
  <xsl:variable name="unique-dates" 
select="/NewsList/List/News[not(Date=preceding-sibling::News/Date)]/Date"/>
  <xsl:for-each select="$unique-dates">
    Date is: <xsl:value-of select="."/><br/>
    <xsl:for-each select="/NewsList/List/News[Date=current()]">
      <H1><xsl:value-of select="P1"/></H1>
      <!-- Other such stuff here, but I would like to put this functionality 
into another template -->
    </xsl:for-each>
  </xsl:for-each>
</xsl:template>


Problem with the second stylesheet is that while the result is grouped by 
date, it is grouped by how the dates appear in document order, which I have 
no controll over, and I want it by date descending like in the first 
stylesheet.

If some of you can tell me how to do it, I will be very gratefull.

Sincerly
Ragulf Pickaxe :)


_________________________________________________________________
MSN Photos is the easiest way to share and print your photos: 
http://photos.msn.com/support/worldwide.aspx


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]