0

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 タグを無視する方法です。どうすればそれを達成できますか?

4

1 に答える 1