LINQ TO XML 解析 RSS 提要

Posted

技术标签:

【中文标题】LINQ TO XML 解析 RSS 提要【英文标题】:LINQ TO XML Parse RSS Feed 【发布时间】:2011-05-04 21:14:26 【问题描述】:

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

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

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

xdoc.Element(ns + "channel");

这可以正常工作并按预期返回一个对象

我输入:

xdoc.Element(ns + "item");

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

所以我输入了..

xdoc.Elements(ns + "item");

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

谁能给我一些指示我哪里出错了?我也尝试用前面的 rdf 替换命名空间。

谢谢

【问题讨论】:

【参考方案1】:

您引用了错误的命名空间。所有元素都使用默认命名空间而不是 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();

【讨论】:

谢谢,效果很好。抱歉验证答案的延迟,我被拖到了别的东西上。再次感谢。 :)

以上是关于LINQ TO XML 解析 RSS 提要的主要内容,如果未能解决你的问题,请参考以下文章

解析 XML(RSS 提要)的 PHP 错误

SWIFT/iOS:将 XML 数据(RSS 提要)解析为明文,将图像和视频添加到 textview

如何使用 JavaScript 解析 RSS 提要?

从 Feedburner RSS 提要中获取原始 XML 数据

获取前缀:来自 XML RSS 提要的项目值

解析 RSS 提要最近一直抛出文档类型定义 (DTD) 错误