2011-05-04 5 views
0

Je suis en train d'analyser un flux RSS en utilisant LINQ pour XmlLINQ to XML Parse RSS

Ceci est le flux rss: http://www.surfersvillage.com/rss/rss.xml

Mon code est le suivant pour essayer d'analyser

List<RSS> results = null; 

XNamespace ns = "http://purl.org/rss/1.0/"; 
XNamespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; 

XDocument xdoc = XDocument.Load("http://www.surfersvillage.com/rss/rss.xml"); 

results = (from feed in xdoc.Descendants(rdf + "item") 
      orderby int.Parse(feed.Element("guid").Value) descending 
      let desc = feed.Element("description").Value 
      select new RSS 
      { 
       Title = feed.Element("title").Value, 
       Description = desc, 
       Link = feed.Element("link").Value 
      }).Take(10).ToList(); 

Pour tester le code que j'ai mis un point d'arrêt dans la première ligne de la requête Linq et testé dans la fenêtre intermédiaire avec les éléments suivants:

xdoc.Element(ns + "channel"); 

Cela fonctionne et retourne un objet comme attendre

type i dans:

xdoc.Element(ns + "item"); 

ci-dessus travaillé et retourné un seul objet, mais je suis à la recherche de tous les articles

donc je tapais dans ..

xdoc.Elements(ns + "item"); 

Ceci ne renvoient rien même s'il y a plus de 10 articles, la méthode des k soit et aussi retourné null.

Quelqu'un pourrait-il me donner quelques indications sur l'endroit où je me trompe? J'ai essayé de substituer le rdf en avant aussi pour l'espace de noms.

Merci

Répondre

4

Vous référencez le mauvais espace de noms. Tous les éléments utilisent l'espace de nommage par défaut plutôt que le rdf, donc vous code devrait être comme suit:

List<RSS> results = null; 

XNamespace ns = "http://purl.org/rss/1.0/"; 
XDocument xdoc = XDocument.Load("http://www.surfersvillage.com/rss/rss.xml"); 
results = (from feed in xdoc.Descendants(ns + "item") 
      orderby int.Parse(feed.Element(ns + "guid").Value) descending 
      let desc = feed.Element(ns + "description").Value 
      select new RSS 
      { 
       Title = feed.Element(ns + "title").Value, 
       Description = desc, 
       Link = feed.Element(ns + "link").Value 
      }).Take(10).ToList(); 
+0

Merci, cela a très bien fonctionné. Désolé pour le retard dans la vérification de la réponse, j'ai été traîné sur quelque chose d'autre. Merci encore. :) – Mantisimo