Re: [xsl] Display RSS grouped by month

Subject: Re: [xsl] Display RSS grouped by month
From: "Mukul Gandhi" <gandhi.mukul@xxxxxxxxx>
Date: Fri, 9 Nov 2007 11:51:39 +0530
Below is a XSLT 1.0 solution with support of node-set extension function:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                       xmlns:common="http://exslt.org/common";
                       version="1.0">

 <xsl:output method="text" />

 <xsl:key name="by-month" match="*" use="month" />

 <xsl:variable name="month-map">
   <months>
     <Jan>January</Jan>
     <Feb>February</Feb>
     <Mar>March</Mar>
     <Apr>April</Apr>
     <May>May</May>
     <Jun>June</Jun>
     <Jul>July</Jul>
     <Aug>August</Aug>
     <Sep>September</Sep>
     <Oct>October</Oct>
     <Nov>November</Nov>
     <Dec>December</Dec>
   </months>
 </xsl:variable>

 <xsl:template match="/">
   <xsl:variable name="rtf">
     <xsl:for-each select="rss/channel/item">
       <x>
         <xsl:copy-of select="title" />
         <xsl:variable name="month">
           <xsl:call-template name="getMonth">
             <xsl:with-param name="pub-date" select="pubDate" />
           </xsl:call-template>
         </xsl:variable>
         <month><xsl:value-of
select="common:node-set($month-map)/months/*[local-name() =
normalize-space($month)]" /></month>
       </x>
      </xsl:for-each>
   </xsl:variable>

   <xsl:for-each select="common:node-set($rtf)/x[generate-id() =
generate-id(key('by-month', month)[1])]">
     <xsl:value-of select="month" /><xsl:text>&#xa;</xsl:text>
     <xsl:for-each select="key('by-month', month)">
       <xsl:value-of select="title" /><xsl:text>&#xa;</xsl:text>
     </xsl:for-each>
     <xsl:text>&#xa;</xsl:text>
   </xsl:for-each>
</xsl:template>

<xsl:template name="getMonth">
 <xsl:param name="pub-date" />

 <xsl:variable name="temp-str" select="translate($pub-date, ',', '')" />
 <xsl:value-of select="substring-before(substring-after(substring-after($temp-str,
' '), ' '), ' ')" />
</xsl:template>

</xsl:stylesheet>


On 11/9/07, Brent Wilcox <cwilly00@xxxxxxxxx> wrote:
> Hello,
>
> I would like to display an RSS feed grouped by month
> using XSL version 1, please.
>
> Here is my xml:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <rss version="2.0">
> <channel>
>  <title>My Feed</title>
>  <description>My feed desc</description>
>  <item>
>    <title>News 1</title>
>    <description>News 1</description>
>    <link>http://www.none.ca/1</link>
>    <pubDate>Thu, 8 Nov 2007 10:10:30 -0500</pubDate>
>   </item>
>   <item>
>     <title>News 2</title>
>     <description>News 2</description>
>     <link>http://www.none.ca/2</link>
>     <pubDate>Tue, 2 Oct 2007 10:10:16 -0500</pubDate>
>   </item>
> </channel>
> </rss>
>
> Desired output:
>
> November
> News 1
>
> October
> News 2
>
> Thank you,
>
> Brent Wilcox


-- 
Regards,
Mukul Gandhi

Current Thread