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对象返回格式化程序(代码不是示出).但是对于这种工作方法,我需要事先知道哪些节点导致异常. 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 例外情况:
<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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |