2010-06-29 6 views
1

J'ai un problème pour analyser un flux rss en utilisant C#. J'avais l'habitude d'utiliser cette méthode pour charger le flux. XDocument rssFeed = XDocument.Load (@url); Mais, quand je remarque quand l'alimentation a cette méthode se bloque xml-stylesheet disant que le XML ne sont pas formatté ... est ici un flux rss qui contient cette balise http://www.channelnews.fr/accueil.feed?type=rssC# consommer le flux rss contenant xml-stylesheet?

Quelle serait la meilleure façon d'analyser un flux RSS en utilisant C#?

Merci pour votre aide

Répondre

3

Ce code fonctionne pour moi

static XDocument DownloadPage() 
    { 
     var req = (HttpWebRequest)WebRequest.Create("http://www.channelnews.fr/accueil.feed?type=rss"); 
     req.UserAgent = "Mozilla"; 

     using(var response = req.GetResponse()) 
     using(var stream = response.GetResponseStream()) 
     using (var reader = new StreamReader(stream)) 
      return XDocument.Load(reader); 
    } 

Notez que si vous omettez la mise UserAgent, alors la réponse contiendra la chaîne 'DOS' qui est defnintly pas xml :)

+0

Oui, ce fut ça ... J'ai raté the UserAgent ... Merci ... Stan – Stan92

0

celui-ci fonctionne mieux:

XDocument xdoc = XDocument.Load("http://pedroliska.wordpress.com/feed/"); 

var items = from i in xdoc.Descendants("item") 
      select new 
      { 
       Title = i.Element("title").Value 
      }; 

Ainsi, vous pouvez maintenant accéder aux titres rss en faisant une boucle ou quelque chose comme:

items[0].Title 

Et le code tire le titre du flux RSS, vous pouvez tirer la description, lien, pubDate, etc.

+0

N'oubliez pas d'ajouter l'espace de nom au XName livré à '.Descendants' et' .Element', ou vous pourriez obtenir 0 résultats. Pour les flux Atom, ceci est statique, donc: 'Chaîne statique privée XName (string elementName) {return string.Concat (" {http://www.w3.org/2005/Atom} ", elementName); } ' – ANeves