我正在尝试使用LINQ to Xml解析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个项目,也没有返回任何内容,后代方法也不起作用,也返回null。
有人能给我一些指示我出错的地方吗?我已经尝试将前面的rdf替换为命名空间。
由于
答案 0 :(得分:5)
您正在引用错误的命名空间。所有元素都使用默认命名空间而不是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();