• home
    • news & events
    • blog
  • über uns
    • projekte und referenzen
    • partner
    • produkte & technologien
    • offene jobs / stellen
    • veröffentlichungen
  • dienstleistungen & services
    • software design & architektur
    • software entwicklung
    • beratung / consulting
    • training, kurse und workshops
  • angebote
    • quick-starts
    • trainings und kurse
    • modulare sharepoint 2010 workshops
  • kontakt
Wir bieten SharePoint und .NET
Kompetenz, Erfahrung und Know-How:
"1stQuad guaranteed."
Diesen Blog abonnieren
Subscribe in NewsGator Online Add to My AOL
Add to Google Reader or Homepage Add to netvibes

Aktuelle Posts

Quick-Tipp: Publishing Site Settings
Update: Dynamisches Wiki Inhaltsverzeichnis
Chart Part für SharePoint 2010
SharePoint Content DB Migration -> Access denied
Konfigurieren von „Gefällt mir“ und Kategorien und Notizen

Archiv

Januar 2012 (4)
Dezember 2011 (2)
November 2011 (10)
September 2011 (3)
August 2011 (7)
Juli 2011 (1)
Juni 2011 (3)
Mai 2011 (6)
April 2011 (5)
März 2011 (8)
Februar 2011 (8)
Januar 2011 (4)
Dezember 2010 (5)
November 2010 (7)
September 2010 (6)
August 2010 (2)
Juli 2010 (11)
Juni 2010 (13)
Mai 2010 (11)
April 2010 (4)
März 2010 (6)
Februar 2010 (2)
Januar 2010 (6)
Dezember 2009 (4)
November 2009 (13)
Oktober 2009 (17)
September 2009 (2)
Juli 2009 (2)
März 2009 (2)
Januar 2009 (1)

1stQuad ist Microsoft Certified Gold Partner und bietet SharePoint und .NET Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Schweiz sowie Deutschland und Östereich.
1stQuad ist MatchPoint Partner und bietet MatchPoint Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Schweiz sowie Deutschland und Östereich.
1stQuad ist Nintex Partner und bietet Nintext SharePoint Workflows Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Schweiz sowie Deutschland und Östereich.
1stQuad ist Balesio Gold Partner und bietet SharePoint FILEMinimizer Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Schweiz sowie Deutschland und Östereich.
1stQuad Solutions ist Kentico Certified Solution Partner und bietet Produkt- und Projekt-Kompetenz, -Erfahrung und -Know-How für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Schweiz sowie Deutschland und Östereich.
© 2011 1stQuad Solutions
Alle Rechte vorbehalten
> Impressum
Wir bieten Microsoft SharePoint und .NET Projekt- und Produkt-Know-how, Kompetenz und Erfahrung für Entwicklung, Architektur, Beratung, Schulung, Training und Kurse in Zürich, Bern, Basel, Schweiz sowie Deutschland und Östereich.

Blog > Oktober 2009

RSS und ATOM Feeds: System.ServiceModel.Syndication

Die Bereitstellung und vor allem das Konsumieren von Syndication Feeds, also in der Regel RSS und ATOM Feeds, wird immer häufiger für Web-Projekte gefordert, speziell auch bei der Arbeit mit SharePoint. Für eigene Komponenten gibt es eine Menge mögliche Klassenbibliotheken und Frameworks - dabei wird oft vergessen, dass das .NET Framework 3.5 ja bereits eine umfangreiche Klassenbiblbiothek für Syndication Feeds bereitstellt. Dieser Blog-Post zeigt, welche Möglichkeiten diese bietet und wie man mit etwas Code auch RSS 1.x Feeds lesen kann.

Veröffentlicht am 01.10.2009 00:27:29 von Michael Hofer mit 0 Kommentar(en)

Sucht man das Web nach Klassen oder gar Frameworks ab, um mit RSS und ATOM Feeds arbeiten zu können, so findet man verschiedenste Implementation, die sich durch die Anzahl der unterstützten Protokolle, die zusätzlichen Möglichkeiten (Feeds lesen / schreiben, DataBinding etc.) unterscheiden. Ein gutes Beispiel für eine gelungene Implementation findet man zum Beispiel auf Codeplex: RssToolkit und Argotic Syndication Framework.

Ganz versteckt in einigen wenigen Blog-Einträgen (hier, hier und hier z.B.) habe ich dann aber herausgefunden, dass das .NET Framework 3.5 ja bereits eine Klassenbibliothek beinhaltet, welche uns die Arbeit entscheidend erleichtert:

In der Assembly System.ServiceModel.Web.dll, Version 3.5.0.0 findet man folgenden Namespace: System.ServiceModel.Syndication

Darin befinden sich jede Menge Klassen, welche RSS und ATOM typensicher umsetzten, z.B.:

  • Atom10FeedFormatter
  • RSS20FeedFormatter
  • SyndicationFeed
  • SyndicationItem
  • etc.
Dank dem .NET Framework können wir also ganz einfach mit einem RSS oder ATOM Feed arbeiten:

try
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.IgnoreWhitespace = true;
    settings.CheckCharacters = true;
    settings.CloseInput = true;
    settings.IgnoreComments = true;
    settings.IgnoreProcessingInstructions = true;
    settings.ProhibitDtd = false;
    XmlUrlResolver resolver = new XmlUrlResolver();
    resolver.Credentials = CredentialCache.DefaultCredentials;
    settings.XmlResolver = resolver;

    using (XmlReader reader = XmlReader.Create(FeedUrl, settings))
    {
        SyndicationFeedFormatter formatter = null;
        Atom10FeedFormatter atom = new Atom10FeedFormatter();
        Rss20FeedFormatter rss2 = new Rss20FeedFormatter();
        Rss10FeedFormatter rss1 = new Rss10FeedFormatter();

        SyndicationFeed feed;

        // Determine the format of the feed
        if (reader.ReadState == ReadState.Initial)
        {
            reader.MoveToContent();
        }

        if (atom.CanRead(reader))
        {
            formatter = atom;
        }
        else if (rss2.CanRead(reader))
        {
            formatter = rss2;
        }
        else if (rss1.CanRead(reader))
        {
            formatter = rss1;
        }

        if (formatter == null)
        {
            throw new ApplicationException("The feed format is not supported");
        }

        formatter.ReadFrom(reader);
        feed = formatter.Feed;

        // Remove unwanted items
        List<SyndicationItem> items = new List<SyndicationItem>();

        int added = 0;

        foreach (SyndicationItem i in feed.Items)
        {
            items.Add(i);

            if (added++ == Max_Feed_Items - 1) break;
        }

        feed.Items = items;

        // TODO: work with the feed!

    }
}
catch (Exception ex)
{
    throw new ApplicationException("The feed could not be read. Please check the URL: " + ex.Message, ex);
}


Im obigen Code muss folgendes beachtet werden. Feeds im RSS 1.x Format werden vom Objektmodell nicht unterstützt. Wie sie aber dem Code entnehmen können, benutze ich trotzdem einen Rss10FeedFormatter. Dieser ist eine einfache Implementation vom SyndicationFeedFormatter und kann von folgender URL fixfertig und funktionierend heruntergeladen werden: http://www.4guysfromrolla.com/articles/031809-1.aspx.

Wirklich fantastisch finde ich auch die Methoden von der Klasse SyndicationFeed, welche es uns erlauben einen x-beliebigen Feed in ein bestimmtes Feed-Format zu konvertieren:
  • SyndicationFeed.SaveAsAtom10
  • SyndicationFeed.SaveAsRss20
Und hier gleich auch noch das Code-Beispiel:

using (StringWriter sw = new StringWriter()) {
using (XmlTextWriter tw = new XmlTextWriter(sw)) {
feed.SaveAsRss20(tw);
string rawFeedInRss20Format = sw.ToString();
tw.Closer();
sw.Close();
}
}

So können Sie z.B: XSL ausbereiten um die Feeds anzuzeigen, müssen sich aber um das Format der Daten keine sorgen mehr machen. Sie schreiben einfach ein XSL für das RSS20-Format und fertig.

Kommentar
Dieser Blog-Eintrag wurde noch nicht kommentiert.
Kommentar hinterlassen



 Security code
Zurück, Seite drucken