2012-04-17 8 views
2

(間接的にマイケル滝MWFeedParserライブラリを介して)NSXMLParser を使用して、以下のRSSフィードを解析:nsxmlparserを使用してrssフィードを解析する際に、不正な文字を無視するにはどうすればよいですか?

http://qdb.us/qdb.xml?action=latest

NSURL *feedURL = [NSURL URLWithString:@"http://qdb.us/qdb.xml?action=random"]; 
self.feedParser = [[MWFeedParser alloc] initWithFeedURL:feedURL]; 
self.feedParser.delegate = self; 
self.feedParser.feedParseType = ParseTypeFull; // Parse feed info and all items 
self.feedParser.connectionType = ConnectionTypeAsynchronously; 
[self.feedParser parse]; 

私はで違法な文字であるように思われる無効なフォーマットされたXMLドキュメントをバック受け取りますフィード。

http://validator.w3.org/check?uri=http%3A%2F%2Fqdb.us%2Fqdb.xml%3Faction%3Dlatest&charset=utf-8&doctype=Inline&group=0&user-agent=W3C_Validator%2F1.1

私はUTF-8にISO-8859-1からのドキュメントのエンコーディングを変更しようとしましたが、それでも問題が発生します。

違法な文字を特定するにはどうすればよいですか?また、どうすればこれらの違法な文字に遭遇したときにRSSフィードの解析が失敗しないのですか?

参考文献:(私はすでに調査してきたリンク)

HTML character decoding in Objective-C/Cocoa Touch

https://stackoverflow.com/users/106244/michael-waterfall

+0

DTHTMLParserはNSXMLParserとほとんど同じ実装ですが、「不正な文字」を許可します。 – endy

答えて

0

私は不正な文字を無視する方法を知りませんが、削除するために、いくつかの正規表現の修正を行うことを検討するかもしれませんそれらを解析する前に、私は、あなたのiPhoneプロジェクトのための最良のXMLパーサーを選択する方法ですhereは、不正な文字でOKかもしれないnsxmlparserのkillxml instandを使用することをお勧めします

0

エニグ2受信機のREST APIからEPGデータを解析する際に、このようなものが見つかりました。この場合、1つのサービスが不正な文字0x05でEPGInfoをプッシュしていました。
私は着信NSDataのクリーンアップメソッドを実装しました。私の場合は

-(NSData *)DataCleaned:(NSData *)data { 
    NSData *clean = nil; 
    const char *old = (const char *)data.bytes; 
    char *flt = (char *)calloc(data.length, sizeof(char)); 
    NSInteger cnt = 0; 
    for(NSInteger i = 0; i < data.length; i++) { 
     if (old[i] != 0x05) 
     flt[cnt++] = old[i]; 
    } 
    clean = [NSData dataWithBytes:flt length:cnt]; 
    free(flt); 
    return clean; 
} 

は、これで問題が解決:これはパーサに渡す前に、私はNSURLSessionから受け取ったNSDataからこれらの0x05のバイトをフィルタリングするための貧乏人の方法です。しかし、もちろんこれは、解析する前にNSDataに応答をロードする必要があります。

関連する問題