2012-01-26 115 views
0

我想解析RSS新聞的XML文件。首先,我嘗試了http://ria.ru/export/rss2/index.xml的RSS,並且一切都很完美。然後我嘗試另一種資源,即http://interfax.ru/rss.asp和我遇到一個問題與日期:用目標C解析RSS

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。 Foor示例:

Wed, 25 Jan 2012 16:41:00 +0400 

但是,具有相同日期格式的第二個RSS會給我NULLstringTimedateFormatFromString也產生NULL值。我使用相同的格式日期更改了地址RSS,但仍然存在此問題。

+0

_exactly_是您嘗試解析的第二個日期字符串? (第一是'星期三,2012年1月25日16:41:00 +0400') – deanWombourne

回答

0

在兩種情況下,您都很難確切地知道發生了什麼,而無法準確知道您在[dateFormat dateFromString:]中傳遞的字符串。你應該發佈更具體的細節來幫助縮小範圍。

不知道更多,我看到兩個鏈接之間唯一明顯的區別是他們似乎使用不同的文本編碼。如果您解析相同的方式而沒有考慮編碼差異,那麼[item objectForKey:]的內容在這兩個RSS源之間可能並不相同。

1

如果您試圖爲任何供稿(不只是您擁有的特定供稿)製作RSS閱讀器,則需要處理各種格式錯誤的日期格式。即使有規範,許多RSS提要並不遵循它們。

一種方法是有日期格式的數組,並通過它枚舉,直到返回一個非空字符串:

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源只會使用一種日期格式)。

+0

只是我無法通過http://interfax.ru/rss.asp獲取NSDate。我不需要使用任何RSS。 –