C#中RSS feed中的DateTime解析异常

前端之家收集整理的这篇文章主要介绍了C#中RSS feed中的DateTime解析异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用SyndicationFeedFormatter和SyndicationFeed对象解析RSS2,Atom提要.但是我在解析DateTime字段时得到了XmlExceptions,比如pubDate和/或lastBuildDate.

2010年2月24日星期三18:56:04 GMT 00:00不起作用

2010年2月24日星期三18:56:04 GMT工作

因此,由于时区字段,它正在投掷.

作为一种解决方法,对于熟悉的提要,我会手动修复这些DateTime节点 – 通过捕获XmlException,将RSS加载到XmlDocument中,修复这些节点的值,创建一个新的XmlReader,然后从这个新的XmlReader对象返回格式化程序(代码不是示出).但是对于这种工作方法,我需要事先知道哪些节点导致异常.

  1. SyndicationFeedFormatter syndicationFeedFormatter = null;
  2. XmlReaderSettings settings = new XmlReaderSettings();
  3. using (XmlReader reader = XmlReader.Create(url,settings))
  4. {
  5. try
  6. {
  7. syndicationFeedFormatter = SyndicationFormatterFactory.CreateFeedFormatter(reader);
  8. syndicationFeedFormatter.ReadFrom(reader);
  9. }
  10. catch (XmlException xexp)
  11. {
  12. // fix those datetime nodes with exceptions and read again.
  13. }
  14. return syndicationFeedFormatter;
  15. }

RSS Feedhttp://news.google.com/news?pz=1&cf=all&ned=us&hl=en&q=test&cf=all&output=rss

例外情况:

XmlException Error in line 1 position
376. An error was encountered when parsing a DateTime value in the XML.
at
System.ServiceModel.Syndication.RSS20FeedFormatter.DateFromString(String
dateTimeString,XmlReader reader)
at
System.ServiceModel.Syndication.RSS20FeedFormatter.ReadXml(XmlReader
reader,SyndicationFeed result) at
System.ServiceModel.Syndication.RSS20FeedFormatter.ReadFrom(XmlReader
reader) at … cs:line 171

  1. <RSS version="2.0">
  2. <channel>
  3. ...
  4. <pubDate>Wed,24 Feb 2010 18:56:04 GMT+00:00</pubDate>
  5. <lastBuildDate>Wed,24 Feb 2010 18:56:04 GMT+00:00</lastBuildDate> <-----exception
  6. ...
  7. <item>
  8. ...
  9. <pubDate>Wed,24 Feb 2010 16:17:50 GMT+00:00</pubDate>
  10. <lastBuildDate>Wed,24 Feb 2010 18:56:04 GMT+00:00</lastBuildDate>
  11. </item>
  12. ...
  13. </channel>
  14. </RSS>

有没有更好的方法来实现这一目标?请帮忙.谢谢.

解决方法

以下是我阅读Google新闻RSS源的hacky解决方法.
  1. string xml;
  2. using (WebClient webClient = new WebClient())
  3. {
  4. xml = Encoding.UTF8.GetString(webClient.DownloadData(url));
  5. }
  6. xml = xml.Replace("+00:00","");
  7. byte[] bytes = System.Text.UTF8Encoding.ASCII.GetBytes(xml);
  8. XmlReader reader = XmlReader.Create(new MemoryStream(bytes));
  9. SyndicationFeed Feed = SyndicationFeed.Load(reader);

猜你在找的C#相关文章