2012-01-26 13 views
0

RSSニュースのXMLファイルを解析しようとしています。まず、http://ria.ru/export/rss2/index.xmlからRSSを試してみました。それから私は別のリソース、すなわちhttp://interfax.ru/rss.aspを試してみましたが、私は、日付に問題が発生しました:目的コードで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は私をNULL与えます。 stringTimedateFormatFromStringの両方がNULL値を生成します。私は同じ形式の日付で住所RSSを変更したが、まだこの問題があります。

+0

構文解析しようとしている2番目の日付文字列は何ですか? (1日目は 'Wed、25 Jan 2012 16:41:00 +0400') – deanWombourne

答えて

0

[dateFormat dateFromString:]に渡す文字列を正確に知らなくても、何が起こっているのか正確に言うのは難しいです。絞り込むために、より具体的な詳細を投稿する必要があります。

もっと分かりませんが、2つのリンクの間に見られる唯一の明白な違いは、異なるテキストエンコーディングを使用するように見えることです。エンコードの違いを考慮せずに同じ方法を解析している場合は、[item objectForKey:]の内容がこれらの2つのRSSフィードで実際に同じではない可能性があります。

1

フィード(特定のフィードだけでなく)のRSSリーダーを作成しようとすると、すべての種類の不正な日付形式に対処する必要があります。仕様があるにもかかわらず、多くのRSSフィードはそれらに従いません。

一つのアプローチは、日付形式の配列を持ち、かつ非nilの文字列が返されるまで、それを列挙することです:

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つしか使用されません)。

+0

ちょうど私はhttp://interfax.ru/rss.aspでNSDateを取得できません。私はRSSを使用する必要はありません。 –

関連する問題