RSS ist ein XML Datenformat. Es wird in Web Seiten eingesetzt um Daten in Maschinen lesbarer Form zu darzustellen. Ein typischer Anwendungsfall sind News die dann per Newsreader automatisch konsumiert werden. Der Benutzer muss diese Seiten dann nicht absurfen und kann diese sogar später wenn keine Internet Verbindung mehr vorhanden ist in seinem Newsreader lesen.
Um solche News aus Daten zu erzeugen kann man ASP.NET "missbrauchen". Warum ich diese Wortwahl treffe wird gleich klarer.
Zunächst verwende ich ein SQLDatasource Control um auf die Tabelle mit den DevTrain Artikeln zuzugreifen. Weiters ein Repeater Control um die Daten auszugeben. Ein RSS Dokument muss folgende Struktur aufweisen (Quelle Wikipedia):
<rss version="2.0">
<channel>
<title>Titel des Feeds</title>
<link>Adresse der Webpräsenz</link>
<description>Kurze Beschreibung des Feeds</description>
<language>de-de</language>
<copyright>urheberrechtliche Informationen</copyright>
<pubDate>Datum der Erstellung</pubDate>
<image>
<url>Soll eine Grafik, z.B. ein Logo, eingebunden werden,
hier dessen Adresse eintragen</url>
<title>Titel des Bildes</title>
<link>Adresse, mit der das Bild verknüpft werden soll, z. B.
die Adresse der Website des Herausgebers</link>
</image>
<item>
<title>Titel des ersten Artikels</title>
<description>Eine kurze Zusammenfassung des Artikels</description>
<link>Adresse zur Gesamtansicht des Artikels</link>
<author>Autor des Artikels <E-Mail-Adresse></author>
</item>
<item>
<title>Titel des zweiten Artikels</title>
<description>
<![CDATA[
<h1>Hier kann auch der vollständige HTML-Inhalt
des Artikels stehen</h1>
<p>?</p>
]]>
</description>
<author>Autor des Artikels <E-Mail-Adresse></author>
</item>
?
</channel>
</rss>
Wobei man sich nicht besonders genau an diese Regeln halten muss. Genau diese XMl Struktur bilden wir nun nach. Wichtiger Trick dabei ist das wir alle HTML Elemente samt Form einfach aus der ASPX Seite entfernen.
<%@ Page Language="VB" ContentType="text/xml" EnableViewState="false" EnableSessionState="False" EnableTheming="false" Theme="" %> <%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<asp:repeater id="rptRSS" runat="server" DataSourceID="DSRSS1" enableviewstate=false>
<headertemplate>
<rss version="2.0">
<channel>
<ttl>5</ttl>
<title>DevTrain Foren neue Einträge</title>
<link>http://beta.devtrain.de/foren/default.aspx</link>
<description>DevTrain das Community Portal für den .NET Entwickler</description>
<lastbuildDate><%=Date.now().tostring("r")%></lastbuildDate>
<image>
<url>http://www.devtrain.de/pics/logo2.gif</url>
<title>DevTrain.de Foren</title>
<link>http://www.devtrain.de</link>
</image>
</headertemplate>
<footertemplate>
</channel>
</rss>
</footertemplate>
<itemtemplate>
<item>
<title><%#librss.FormatForXML(Eval("Thema"))%>:<%#librss.FormatForXML(Eval("Subject"))%></title>
<description><%# librss.FormatForXML(Eval( "Inhalt")) %></description>
<link>http://beta.devtrain.de/Foren/showthread.aspx?threadid=<%#librss.FormatForXML(Eval("MasterID"))%>&postid=<%#librss.FormatForXML(Eval("ID"))%></link>
<author><%# librss.FormatForXML(Eval( "VorName")) %> <%#librss.FormatForXML(Eval("NachName"))%> </author>
<pubDate><%# String.Format("{0:r}", CType(eval("Datum"), DateTime)) %></pubDate>
</item>
</itemtemplate>
</asp:repeater>
<asp:SqlDataSource
ID="DSRSS1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>"
>
</asp:SqlDataSource>
Die statische Methode FormatForXML wandelt alle nicht XML validen Zeichen um. Wichtig ist auch das RSS spezifische Datumsformat das mit dem Format {0:r} erzeugt wird.
Ganz sauber ist diese Lösung nicht, da die kompletten Daten bei jeder Anforderung übertragen werden. Hier hilft der Einsatz des ETAG. Dies aber in einem gesonderten Artikel.