首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Objective C解析RSS

用Objective C解析RSS
EN

Stack Overflow用户
提问于 2012-01-27 02:09:08
回答 2查看 559关注 0票数 0

我正在尝试解析RSS新闻的XML文件。首先,我尝试了http://ria.ru/export/rss2/index.xml的RSS,一切都运行得很好。然后我尝试了另一个资源,即http://interfax.ru/rss.asp,我遇到了日期问题:

代码语言:javascript
复制
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"EEE, d MMM yyyy HH:mm:ss Z"];

NSDate *dateFormatFromString = [dateFormat dateFromString:[item objectForKey:@"Date"]]; 

NSLog(@"%@", [item objectForKey:@"Date"]);

NSDateFormatter *dateFormatNew = [[NSDateFormatter alloc]init];
[dateFormatNew setDateFormat:@"h:mm a, MMM d, YYYY"];    
NSString *stringTime = [dateFormatNew stringFromDate:dateFormatFromString];

NSLog(@"%@", stringTime);

[item objectForKey:@"Date"]没有问题,它和RSS是一样的。例如:

代码语言:javascript
复制
Wed, 25 Jan 2012 16:41:00 +0400

但是,具有相同日期格式的第二个RSS给出了NULLstringTimedateFormatFromString也都会生成NULL值。我更改了具有相同格式日期的地址RSS,但仍然存在此问题。

EN

回答 2

Stack Overflow用户

发布于 2012-01-27 07:17:17

如果您正在尝试为任何提要(而不仅仅是您拥有的特定提要)创建RSS阅读器,则需要处理各种格式错误的日期格式。尽管有规范,但许多RSS提要并不遵循这些规范。

一种方法是拥有一个日期格式数组,并对其进行枚举,直到返回一个非nil字符串:

代码语言:javascript
复制
static NSString *sGetDateForString(NSString *inString)
{
     static NSArray *sPossibleDateFormats = nil;

     if (!sPossibleDateFormats) sPossibleDateFormats = [[NSArray alloc] initWithObjects:
         @"EEE, d MMM yyyy HH:mm:ss Z",
         @"h:mm a, MMM d, YYYY",
         // Add more formats here as you encounter them in the wild
         nil];

     NSDate *result = nil;

     for (NSString *format in sPossibleDateFormats) {
         NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
         [dateFormat setDateFormat:format];

         result = [dateFormat dateFromString:dateString]; 

         [dateFormat release];

         if (result) break;
     }

     return result;
 }

这会很慢,但对于你的应用程序来说可能已经足够快了。如果需要额外的性能,可以尝试缓存匹配日期格式的索引,并将其传递回sGetDateForString() (大多数RSS只使用一种日期格式)。

票数 1
EN

Stack Overflow用户

发布于 2012-01-27 03:05:24

如果不确切知道在这两种情况下传递给[dateFormat dateFromString:]的是什么字符串,就很难说清楚到底发生了什么。您应该发布更具体的详细信息,以帮助缩小范围。

在不了解更多的情况下,我看到这两个链接之间唯一明显的区别是它们似乎使用了不同的文本编码。如果您以相同的方式解析,而不考虑编码差异,那么这两个[item objectForKey:]提要的内容实际上可能并不相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9023033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档