DevTrain .NET Developers Home. Das Community Portal für ASP.NET, Visual Basic, C#
 
  Login Status: Hallo   Anmelden  Suche:  
Navigationslinks überspringen
Startseite
Artikel
Blogs
Foren
ClubClub erweitern

 
Ihre Optionen
Save
Mail
Print
Rate
 
Advertising
  SharePoint konferenz vom 24.-25. Februar 2010 im ehem. IMAX München

 
Navigationslinks überspringen
Autor:Hannes Preishuber

RSS Feed in 3 Minuten erzeugen

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 &lt;E-Mail-Adresse&gt;</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 &lt;E-Mail-Adresse&gt;</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"))%>&amp;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.


Diskutieren Sie in den Foren

DevTrain Camp – Schneller zum .NET 4.0 Developer!