LINQ TO XML解析RSS提要

Man*_*imo 0 rss linq-to-xml

我正在尝试使用LINQ to Xml解析RSS feed

这是RSS供稿: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();
Run Code Online (Sandbox Code Playgroud)

为了测试代码,我在Linq查询的第一行放置了一个断点,并在中间窗口中使用以下命令对其进行了测试:

xdoc.Element(ns + "channel");
Run Code Online (Sandbox Code Playgroud)

这可以正常工作并返回预期的对象

我输入:

xdoc.Element(ns + "item");
Run Code Online (Sandbox Code Playgroud)

以上工作并返回了一个对象,但我正在寻找所有项目

所以我输入了..

xdoc.Elements(ns + "item");
Run Code Online (Sandbox Code Playgroud)

即使有超过10个项目,此操作也不返回任何内容,decendants方法也不起作用,并且还返回null。

谁能给我一些指出我要去哪里的地方的指针?我尝试过用rdf代替名称空间。

谢谢

Laz*_*OfT 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();
Run Code Online (Sandbox Code Playgroud)