加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:18:36 所属栏目:百科 来源:网络整理
导读:我正在尝试使用SyndicationFeedFormatter和SyndicationFeed对象解析Rss2,Atom提要.但是我在解析DateTime字段时得到了XmlExceptions,比如pubDate和/或lastBuildDate. 2010年2月24日星期三18:56:04 GMT 00:00不起作用 2010年2月24日星期三18:56:04 GMT工作 因
我正在尝试使用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对象返回格式化程序(代码不是示出).但是对于这种工作方法,我需要事先知道哪些节点导致异常.

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 feed:http://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

<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>

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读