gpt4 book ai didi

C# 中 RSS 提要中的日期时间解析异常

转载 作者:行者123 更新时间:2023-12-03 06:53:46 30 4
gpt4 key购买 nike

我正在尝试使用 SyndicateFeedFormatter 和 SyndicateFeed 对象解析 Rss2、Atom 提要。但我在解析 DateTime 字段(如 pubDate 和/或 lastBuildDate)时遇到 XmlExceptions。

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 提要: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 提要的巧妙解决方法。

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

关于C# 中 RSS 提要中的日期时间解析异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2328770/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com