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 解析日期问题的主要内容,如果未能解决你的问题,请参考以下文章