Inhaltsverzeichnis
Im Folgenden wollen wir mithilfe von C# und XPath den RSS-Feed von der Tagesschau-Website (Tagesschau.de) verarbeiten und uns stündlich die Titel der aktuellen Tagesthemen ausgeben lassen.
Alles anzeigen
Der Code sollte denke ich leicht verständlich sein. Die Angabe des Intervalls hätte man natürlich auch direkt in Millisekunden oder aber auch mittels
angeben können. Wer mit Ereignissen und Delegaten noch nicht ganz vertraut ist, der sollte sich mal den dazugehörigen Abschnitt im Galileo Openbook Visual C# 2008 durchlesen.
Alles anzeigen
Man könnte hier nun noch viele Sachen erweitern und z.B. auch den entsprechenden Link zum jeweiligen Titel mit ausgeben lassen. Wer sich schon mal mit dem XMLTextReader in C# beschäftigt hat, für den ist die Variante XML-Dateien mit XPath zu verarbeiten vielleicht eine gute Alternative, um performanteren Code zu schreiben.
Nebenbei sei gesagt, dass in meinem Beispiel bei jedem Aufruf von DisplayFeedTitles() neue Instanzen der jeweiligen XPath-Klassen erzeugt werden. Hier sollte man natürlich noch nachbessern, so dass nur eine einzige Instanz erzeugt wird. Der XPathNavigator braucht dann nur immer beim Aufruf von DisplayFeedTitles() zurück auf den Stammknoten gesetzt werden:
Vorbereitung
Zu Beginn sollte sichergestellt werden, dass die zusätzlich benötigten Namespaces eingebunden werden:Timer bereitstellen
Damit wir stündlich den aktuellen RSS-Feed erhalten, bietet es sich an einen Timer zu verwenden, der alle 60 Minuten ein Ereignis auslöst.Quellcode
- try
- {
- // neue Instanz der Timer-Klasse erzeugen
- Timer timer = new Timer();
- // hier legen wir unser Timer-Intervall fest
- timer.Interval = TimeSpan.FromMinutes(60).TotalMilliseconds;
- // Ereignishandler an Ereignis binden
- timer.Elapsed += new ElapsedEventHandler(DisplayFeedTitles);
- // Timer auslösen
- timer.Start();
- // zum beenden des Programms 'q' drücken
- while (Console.Read() != 'q') ;
- }
- catch (Exception error)
- {
- Console.WriteLine("Es ist ein Fehler aufgetreten: {0}", error.Message);
- }
Der Code sollte denke ich leicht verständlich sein. Die Angabe des Intervalls hätte man natürlich auch direkt in Millisekunden oder aber auch mittels
angeben können. Wer mit Ereignissen und Delegaten noch nicht ganz vertraut ist, der sollte sich mal den dazugehörigen Abschnitt im Galileo Openbook Visual C# 2008 durchlesen.
RSS-Feed mit XPath verarbeiten
Jetzt kommt der eigentlich Code, der dafür verantworlich ist uns die jeweiligen Titel der aktuellen Tagesthemen auf der Konsole auszugeben.Quellcode
- public static void DisplayFeedTitles(object source, ElapsedEventArgs e)
- {
- // neue Instanz der XPathDocument-Klasse erstellen - hier übergeben wir dem Konstruktor direkt die Feed-Adresse
- XPathDocument xpathDocument = new XPathDocument("http://www.tagesschau.de/xml/rss2");
- // Erzeugung eines Objektes zum navigieren durch die Knoten im Feed (XML-Knoten)
- XPathNavigator xpathNavigator = xpathDocument.CreateNavigator();
- // alle Titel selektieren, die sich innerhalb der Eltern-Knoten <item></item> befinden
- XPathNodeIterator xpathIterator = xpathNavigator.Select("//item/title");
- // prüfen, ob überhaupt Titel gefunden wurden
- if (xpathIterator.Count > 0)
- {
- Console.WriteLine("Die aktuellen Tagesthemen:");
- // durch die Titel-Knoten durchiterieren und den aktuellen Wert/Text des jeweiligen Titel-Knoten ausgeben
- while (xpathIterator.MoveNext())
- {
- Console.WriteLine(xpathIterator.Current.Value);
- }
- }
- else
- {
- Console.WriteLine("Keine Tagesthemen vorhanden");
- }
- xpathNavigator = null;
- xpathDocument = null;
- }
Man könnte hier nun noch viele Sachen erweitern und z.B. auch den entsprechenden Link zum jeweiligen Titel mit ausgeben lassen. Wer sich schon mal mit dem XMLTextReader in C# beschäftigt hat, für den ist die Variante XML-Dateien mit XPath zu verarbeiten vielleicht eine gute Alternative, um performanteren Code zu schreiben.
Nebenbei sei gesagt, dass in meinem Beispiel bei jedem Aufruf von DisplayFeedTitles() neue Instanzen der jeweiligen XPath-Klassen erzeugt werden. Hier sollte man natürlich noch nachbessern, so dass nur eine einzige Instanz erzeugt wird. Der XPathNavigator braucht dann nur immer beim Aufruf von DisplayFeedTitles() zurück auf den Stammknoten gesetzt werden:
8.850 mal gelesen