WordPress のデフォルト RSS フィードを解析する iPhone アプリがあります。title、pubDate、dc:creator、link などのさまざまなタグを解析しています。
dc:creator タグは、以前は以下のように記述されていました。私が更新していないWordpressサイトには、次のようにこのタグがまだ表示されています。
<dc:creator>Andy RR</dc:creator>
NSXMLParser を使用しています。didStartElement メソッドで次のコードを使用して、このテキストを正常に取得できました。
if ([elementName isEqual:@"dc:creator"])
{
currentString = [[NSMutableString alloc] init];
[self setCreator:currentString];
}
しかし、更新された WordPress サイトでは、http://sitename.com/feed の下にあるデフォルトのフィードは、次のように CDATA 内に囲まれた dc:creator タグを示しています。
<dc:creator>
<![CDATA[ Andy RR ]]>
</dc:creator>
そのため、以前のコードは dc:creator 内のテキストを取得していません。これは、現在 CDATA ブロックで囲まれているためです。
ここで、この CDATA ブロックを dc:creator の下に取得したいと考えています。NSXMLParser の次のメソッドを使用できます。
-(void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
{
currentString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
NSLog(@"CDaTa text %@", currentString);
}
しかし問題は、このメソッドが CDATA タグの下にある他のタグからも CDATA からすべてのテキストを取得することです。dc:creator 以外にも、"category" や "description" などのタグがあり、CDATA ブロックの下にテキストが囲まれていることに注意してください。
私が欲しいのは、NSXMLParser の foundCDATA メソッドが dc:creator タグの下のテキストのみを取得し、カテゴリや説明などの他の CDATA タグを無視する方法です。どうすればそれを達成できますか?