2010-06-10 12 views

Respuesta

10

Pregunta anterior, pero merece una respuesta.

There es una manera relativamente simple de determinar si tiene un RSS o un Atom. Requiere lectura o intentar leer el 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

veo que pensé y vi otro ejemplo de esto, pero no recuerdo por qué no me gustó. Fue hace mucho tiempo, y esto funciona, así que considera esta la mejor respuesta, gracias :) – SelAromDotNet

+0

Ok, cuando pruebo este feed (http://en.espnf1.com/rss/motorsport/story/feeds/0.xml ? type = 2) que es de tipo Atom 2.0 su código no funciona ya que la línea atom.CanRead (reader) devuelve false. ¿Cuál es la solución aquí para manejar Atom Ver? 2.0? – Marko

+0

No es átomo 2.0, por lo que sé. Me parece que esa alimentación está rota. Tiene basura en él. Para evitarlo, sugiero arreglar el feed antes de intentar leerlo. Acabo de probar esto y funciona para mí aquí. – Cheeso

Cuestiones relacionadas