的LINQ to XML解析RSS订阅

问题描述:

我试图使用LINQ to XML的LINQ to XML解析RSS订阅

这是RSS提要解析一个RSS feed: http://www.surfersvillage.com/rss/rss.xml

我的代码如下尝试解析

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(); 

为了测试我把一个断点在LINQ查询的第一行,并测试了它在中间窗口的代码如下:

xdoc.Element(ns + "channel"); 

这工作和期待

我输入返回一个对象:

xdoc.Element(ns + "item"); 

上述工作,并返回一个对象,但我期待所有项目

所以我输入在...

xdoc.Elements(ns + "item"); 

即使有超过10个项目,这个返回没有任何东西,后代方法不工作k并且也返回null。

任何人都可以给我几个指向我要去哪里错的地方吗?我试着用rdf代替前面的命名空间。

谢谢

您引用了错误的名称空间。所有的元素都使用默认的命名空间而不是rdf,所以你的代码应该如下:

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

谢谢,这很好。对不起,在验证答案的延迟,我被拖到别的东西。再次感谢。 :) – Mantisimo 2011-05-08 18:28:45