【发布时间】:2010-02-24 19:16:17
【问题描述】:
我正在尝试使用 SyndicationFeedFormatter 和 SyndicationFeed 对象解析 Rss2、Atom 提要。但是在解析 pubDate 和/或 lastBuildDate 之类的 DateTime 字段时,我得到了 XmlExceptions。
2010 年 2 月 24 日星期三 18:56:04 GMT+00:00 不起作用
格林威治标准时间 2010 年 2 月 24 日星期三 18:56:04 有效
所以,由于时区字段,它正在抛出。
作为一种解决方法,对于熟悉的提要,我将手动修复那些 DateTime 节点 - 通过捕获 XmlException、将 Rss 加载到 XmlDocument、修复这些节点的值、创建新的 XmlReader,然后从这个新的 XmlReader 对象返回格式化程序(代码未显示)。但是要使这种方法起作用,我需要事先知道哪些节点会导致异常。
SyndicationFeedFormatter syndicationFeedFormatter = null;
XmlReaderSettings settings = new XmlReaderSettings();
using (XmlReader reader = XmlReader.Create(url, settings))
{
try
{
syndicationFeedFormatter = SyndicationFormatterFactory.CreateFeedFormatter(reader);
syndicationFeedFormatter.ReadFrom(reader);
}
catch (XmlException xexp)
{
// fix those datetime nodes with exceptions and read again.
}
return syndicationFeedFormatter;
}
RSS提要:http://news.google.com/news?pz=1&cf=all&ned=us&hl=en&q=test&cf=all&output=rss
异常详情:
第 1 行位置出现 XmlException 错误 376. 解析 XML 中的 DateTime 值时遇到错误。
在 System.ServiceModel.Syndication.Rss20FeedFormatter.DateFromString(字符串 dateTimeString, XmlReader 阅读器)
在 System.ServiceModel.Syndication.Rss20FeedFormatter.ReadXml(XmlReader 阅读器,SyndicationFeed 结果)在 System.ServiceModel.Syndication.Rss20FeedFormatter.ReadFrom(XmlReader 读者)在... cs:line 171
<rss version="2.0">
<channel>
...
<pubDate>Wed, 24 Feb 2010 18:56:04 GMT+00:00</pubDate>
<lastBuildDate>Wed, 24 Feb 2010 18:56:04 GMT+00:00</lastBuildDate> <-----exception
...
<item>
...
<pubDate>Wed, 24 Feb 2010 16:17:50 GMT+00:00</pubDate>
<lastBuildDate>Wed, 24 Feb 2010 18:56:04 GMT+00:00</lastBuildDate>
</item>
...
</channel>
</rss>
有没有更好的方法来实现这一点?请帮忙。谢谢。
【问题讨论】:
标签: exception datetime parsing rss xmlexception