C# SyndicationFeed - RSS 解析日期问题

Posted

技术标签:

【中文标题】C# SyndicationFeed - RSS 解析日期问题【英文标题】:C# SyndicationFeed - RSS parsing date issue 【发布时间】:2014-06-18 14:11:10 【问题描述】:

我正在使用SyndicationFeed 从不同的 RSS 源中检索一些数据。但是,我在尝试读取 RSS 时遇到了一个问题,据我所知,该 RSS 的元素和数据与有效的相同。

SyndicationFeed feed = SyndicationFeed.Load(XmlReader.Create("http://rsslink"));

例如,这个 RSS 工作得很好并且被正确接受:http://kjellochklortanten.libsyn.com/rss

虽然这个 RSS:http://feeds.feedburner.com/tedtalks_audio 导致 SyndicationFeed 抛出错误(这是从瑞典语翻译的):

解析 XML 中的 DateTime 值时出错

我查看了两个提要中的日期,据我所知,它们是相同的。

是否有任何 C#-ninja 知道可能导致此错误的原因?

提前致谢!

【问题讨论】:

你能提供有问题的 XML 吗? 嗨!我将链接发布到一个工作的 RSS/XML 提要和一个不工作的提要。这样就够了吗? :) 啊,你的意思是哪一行发生了错误?对于 TedTalk-RSS,它是:2014 年 5 月 1 日星期四 10:00:13 UTC。也许是导致问题的“UTC”? 该日期不是有效的 XML 日期时间。您需要将其视为字符串并自行解析。 谢谢,这个答案让我找到了解决这一切的正确方向,***.com/a/3936714/3257261 - 我是否应该也添加这个链接作为我的问题的答案,或者这个评论是否足够? (*** 新手)。 【参考方案1】:

出现此问题的原因在于第二个 Feed 中使用的日期格式。 SyndicationFeed.Load 方法期望接收标准格式的提要。以下为标准格式示例:

格林威治标准时间 2009 年 10 月 5 日星期一 08:00:06

但是,Feed 中的 lastBuildDate 是:

2014 年 5 月 2 日星期五 04:58:16 UTC

要解决此问题,请创建一个可识别该格式的自定义 XML 阅读器。复制MyXmlReader的整个代码并替换

const string CustomUtcDateTimeFormat = "ddd MMM dd HH:mm:ss Z yyyy";  

通过

const string CustomUtcDateTimeFormat = "ddd, dd MMM yyyy HH:mm:ss 'UTC'";

现在使用它

//var feed = SyndicationFeed.Load(XmlReader.Create("http://feeds.feedburner.com/tedtalks_audio"));
XmlReader r = new MyXmlReader("http://feeds.feedburner.com/tedtalks_audio"); 
var feed = SyndicationFeed.Load(r);

该代码适用于两个提要。

赫吉达

【讨论】:

抱歉回复晚了。非常感谢!这既解释了问题又很好地解决了问题。 Hej DA! :D 不错的一个!也解决了我的问题:)

以上是关于C# SyndicationFeed - RSS 解析日期问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 SyndicationFeed 读取 SyndicationItem 中的非标准元素

结合两个 SyndicationFeed

如何开始制作 C# RSS 阅读器?

C#版简易RSS阅读器

如何在 C# 中导入原始 RSS 提要?

使用 C# 在 .net 中阅读 rss 提要的最佳方式 [关闭]