2009-08-29 17 views
9

E 'pratico/possibile utilizzare la serializzazione per leggere i dati da un feed RSS? Fondamentalmente voglio estrarre informazioni dalla mia coda Netflix (fornita da un feed RSS), e sto cercando di decidere se la serializzazione è fattibile/possibile, o se dovrei usare qualcosa come XMLReader. Inoltre, quale sarebbe il modo migliore per scaricare il feed da un URL? Non ho mai tirato file da nient'altro che drive, quindi non sono sicuro di come farlo.deserializzazione un feed RSS in .NET

risposta

18

Se è possibile utilizzare LINQ, LINQ to XML è un modo semplice per ottenere le basi di un documento di feed RSS.

Questo è da something I wrote per selezionare un insieme di tipi anonimi di feed RSS del mio blog, per esempio:

protected void Page_Load(object sender, EventArgs e) 
{ 
    XDocument feedXML = XDocument.Load("http://feeds.encosia.com/Encosia"); 

    var feeds = from feed in feedXML.Descendants("item") 
       select new 
       { 
       Title = feed.Element("title").Value, 
       Link = feed.Element("link").Value, 
       Description = feed.Element("description").Value 
       }; 

    PostList.DataSource = feeds; 
    PostList.DataBind(); 
} 

si dovrebbe essere in grado di utilizzare qualcosa di molto simile contro il tuo feed Netflix.

3

Se stai usando .NET 3.0 o 3.5 ... allora io suggerirei di usare un XMLReader di leggere il documento in un XDocument. È quindi possibile utilizzare LINQ in XML per eseguire una query e rendere il feed RSS in qualcosa di utilizzabile.

Costruire qualcosa per de-serializzare l'XML è anche fattibile e funzionerà altrettanto bene (se non meglio) ma richiederà più tempo per creare.

In entrambi i casi funziona ... fare quello che stai più bene con (o, se si sta cercando di imparare la serializzazione XML, andare per esso e imparare qualcosa di nuovo).

15

Il framework .NET 3.5 ha aggiunto il supporto syndication. Il System.ServiceModel.Syndication namespace fornisce un sacco di tipi per gestire i feed, il contenuto del feed e categorie, la formattazione Feed (RSS 2.0, Atom 1.0), ecc

http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.aspx

Avete alcune opzioni per serializzazione, ma il più semplice è probabilmente meglio descritto qui:

http://msdn.microsoft.com/en-us/library/bb536530.aspx

+0

ho dato un'occhiata a questo, ma sembra che il namespace prevede solo opzioni di serializzazione, non le opzioni di deserializzazione, a meno che non ho trascurato qualcosa. – MGSoto

+0

Si "deserializza" tramite il metodo statico SyndicationFeed.Load. Rileva automaticamente il formato di input. Se hai bisogno di più controllo, puoi usare direttamente i formattatori ... tutti hanno un metodo ReadFrom che accetta un XmlReader. – jrista

+0

Dare un'occhiata a questo quando torno a casa, questo è bello sapere se ho mai bisogno di fare un altro progetto RSS. – MGSoto

2

Partenza this link per una routine di scaricare abbastanza approfondita.

RSS è fondamentalmente un derivato di XML. Mi piace this link per la definizione del formato RSS. This one ha un campione di base.

4
using System.ServiceModel.Syndication; 

public static SyndicationFeed GetFeed(string uri) 
    { 
     if (!string.IsNullOrEmpty(uri)) 
     { 
      var ff = new Rss20FeedFormatter(); // for Atom you can use Atom10FeedFormatter() 
      var xr = XmlReader.Create(uri); 
      ff.ReadFrom(xr); 
      return ff.Feed;    
     } 
     return null; 
    }