我有一个解析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下的默认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之外,还有其他标签,如“category”和“description”,它们也包含CDATA块下的文本。
我想要的是NSXMLParser的foundCDATA方法如何才能获得dc:creator标签下的文本,并忽略其他CDATA标签,如类别和描述。我怎样才能做到这一点?
答案 0 :(得分:0)
使用以下方法解决了我自己:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqual:@"dc:creator"])
{
currentString = [[NSMutableString alloc] init];
[self setCreator:currentString];
}
}
并且在NSXMLParser的cdata方法中,只需附加字符串:
-(void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
{
NSString *someString1 = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
[currentString appendString:someString1];
}