2010-06-10 9 views

risposta

10

Vecchia domanda, ma merita una risposta.

è un modo relativamente semplice per determinare se si dispone di un feed RSS o Atom. Richiede la lettura o il tentativo di leggere il documento.

public SyndicationFeed GetSyndicationFeedData(string urlFeedLocation) 
{ 
    XmlReaderSettings settings = new XmlReaderSettings 
     { 
      IgnoreWhitespace = true, 
      CheckCharacters = true, 
      CloseInput = true, 
      IgnoreComments = true, 
      IgnoreProcessingInstructions = true, 
      //DtdProcessing = DtdProcessing.Prohibit // .NET 4.0 option 
     }; 

    if (String.IsNullOrEmpty(urlFeedLocation)) 
     return null; 

    using (XmlReader reader = XmlReader.Create(urlFeedLocation, settings)) 
    { 
     if (reader.ReadState == ReadState.Initial) 
      reader.MoveToContent(); 

     // now try reading... 

     Atom10FeedFormatter atom = new Atom10FeedFormatter(); 
     // try to read it as an atom feed 
     if (atom.CanRead(reader)) 
     { 
      atom.ReadFrom(reader); 
      return atom.Feed; 
     } 

     Rss20FeedFormatter rss = new Rss20FeedFormatter(); 
     // try reading it as an rss feed 
     if (rss.CanRead(reader)) 
     { 
      rss.ReadFrom(reader); 
      return rss.Feed; 
     } 

     // neither? 
     return null; 
    } 
} 
+0

vedere ho pensato e ho visto un altro esempio di questo, ma non ricordo perché non mi è piaciuto. E 'stato così tanto tempo fa, e funziona, quindi considera questa la migliore risposta, grazie :) – SelAromDotNet

+0

Ok così quando provo questo feed (http://en.espnf1.com/rss/motorsport/story/feeds/0.xml ? type = 2) che è di tipo Atom 2.0 il tuo codice non funziona poiché la riga atom.CanRead (reader) restituisce false. Qual è la soluzione qui per gestire Atom Ver. 2.0? – Marko

+0

Non è atomo 2.0, per quanto ne so. Mi sembra che il feed sia rotto. Ha spazzatura in esso. Per ovviare a questo problema, suggerirei di correggere il feed prima di provare a leggerlo. Ho appena provato questo e funziona per me qui. – Cheeso