RSS date formatting with MSXML4

Damn, I’ve been looking for this for a long time, but I couldn’t find a proper solution. So, what was the problem? Well, I wanted to create a page that gives an overview of several RSS-feeds I follow. The page should replicate some information of these feeds: just the title and the date of the last 5 posts. I wanted to give the date in the feed (i.e. ‘pubDate’) a nice Dutch look and feel, so the rather unreadable “Fri, 15 Sep 2006 13:57:48 +0000” would become “15 september 2006”. These RSS-feeds I parse with an XSLT-stylesheet using (Classic) ASP.

A date in a RSS-feed must be defined as RFC-822. However, I could not use the handy date-time functions for XSLT 2.0 to format this date, because these are not supported by MSXML4, the XML-parser my provider supplies. MSXML supports the ms:format-date function, but this function can handle only standard XSD date formats, which RFC-822 is not. (Bloody hell, I wanted to get back to client-side coding!)

The solution I took is the following: using VBScript in my stylesheet I parse the RFC-822 date as a string and build my Dutch date format with my own hands:


<?xml version='1.0' encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:vbs="urn:schemas-sqlxml-org:vbs">

<msxsl:script language="VBScript" implements-prefix="vbs">
  <![CDATA[

   function formateDate(datum)
     dim arr, mnd, x, y, dag, jaar
     arr = Split("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", ",")
     mnd = Split("januari,februari,maart,april,mei,juni,juli,augustus,september,oktober,november,december", ",")
     For x = 0 To UBound(arr)
       If InStr(datum, arr(x)) Then
         y = InStr(datum, arr(x))
         dag = Left(datum, y)
         jaar = Mid(datum, y, 8)
         formateDate = stripNr(dag) & " " & mnd(x) & " " & stripNr(jaar)
         exit function
       End If
    Next
    formateDate = ""
   end function

   function stripNr(nr)
     dim arr, str, x
     arr = Split(nr)
     for x = 0 to UBound(arr)
       if isNumeric(arr(x)) then str = str & arr(x)
     next
     stripNr = str
   end function

  ]]>
</msxsl:script>

[... some more code ...]

I’m not sure if this is a good approach, but luckily it works, and it’s good enough for me, because the page I wanted to create is just a start page for my mother with references to several baby blogs: greut.nl/startpagina.

Nonetheless I’m very pleased to get feedback on the code, if you have a better solution, please share it with me!

Tags: , , , , ,

1 reactie »

  1. bert said

    Time to switch to ASP.NET! Just read the RSS XML Documents with the XMLDocument object, for presentation of dates look at the DateTime object in combination of CultureInfo. Your functions like StripNr and FormatDate are build in the .NET Framework so no worries about that. For really lazy people :-) here is a RSS Control to drag’n’drop on the webform.

RSS feed for comments on this post · TrackBack URI

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s

%d bloggers op de volgende wijze: