我有一个解析 WordPress 默认 RSS 提要的 iPhone 应用程序。它正在解析各种标签,包括标题、pubDate、dc:creator 和链接。
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 块包围。
现在我想在 dc:creator 下获取这个 CDATA 块。我可以使用以下 NSXMLParser 方法:
-(void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
{
currentString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
NSLog(@"CDaTa text %@", currentString);
}
但问题是这个方法从 CDATA 中获取所有来自其他标签的文本,以及包含在 CDATA 标签下的所有文本。请记住,除了 dc:creator 之外,还有其他标签,如“类别”和“描述”,它们的文本也包含在 CDATA 块下。
我想要的是 NSXMLParser 的 foundCDATA 方法如何只能获取 dc:creator 标记下的文本而忽略其他 CDATA 标记,如类别和描述。我怎样才能做到这一点?