Iphone 将NSXMLParser与CDATA一起使用
我正在用NSXMLParser解析一个RSS提要,它对标题和其他字符串来说工作得很好,但其中一个元素是一个类似于Iphone 将NSXMLParser与CDATA一起使用,iphone,objective-c,nsxmlparser,cdata,Iphone,Objective C,Nsxmlparser,Cdata,我正在用NSXMLParser解析一个RSS提要,它对标题和其他字符串来说工作得很好,但其中一个元素是一个类似于 <!CDATA <a href="http:image..etc> } } }CDATA的要点是,其中的任何内容都不会被视为XML文档的一部分。 因此,如果CDATA中有标记,解析器将忽略它们 我猜这个CDATA在description元素中。因此,您需要手动或通过另一个解析器实例从“description”元素中提取标记 您可以使用 - (void)parse
<!CDATA <a href="http:image..etc>
}
}
}CDATA的要点是,其中的任何内容都不会被视为XML文档的一部分。 因此,如果CDATA中有标记,解析器将忽略它们 我猜这个CDATA在description元素中。因此,您需要手动或通过另一个解析器实例从“description”元素中提取标记 您可以使用
- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
{
NSString *someString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
}
是的,那里有一个图像URL。如何使用NSXMLParser提取图像URL?请查看CDATA部分中的字符串。如果它始终是有效的xml,则在该字符串上启动另一个NSXMLParser实例。如果它不是有效的XML,则必须执行其他操作™, 例如,手动查找标记。诸如Wordpress之类的CMSE具有CDATA标记中的描述。Iphone程序员可能会被要求在其应用程序的RSS阅读器部分显示描述文本,就像所有RSS阅读器一样。加布里埃尔的答案是解决方案。这很有效。如果您需要进一步解析,只需创建另一个解析器。这将是大多数搜索此解析器以完成工作的人的答案。initWithData是否会从找到的NSData中给出一个有效字符串一点也不明显,但当您看到它时,您当然会选择“doh!”。:)为我工作,+1。@Gabriel请看我的问题。如何使用您的代码
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
//NSLog(@"ended element: %@", elementName);
if ([elementName isEqualToString:@"item"]) {
// save values to an item, then store that item into the array...
[item setObject:currentTitle forKey:@"title"];
[item setObject:currentLink forKey:@"link"];
[item setObject:currentSummary forKey:@"description"];
[item setObject:currentDate forKey:@"date"];
[stories addObject:[item copy]];
NSLog(@"adding story: %@", currentTitle);
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
//NSLog(@"found characters: %@", string);
// save the characters for the current item...
if ([currentElement isEqualToString:@"title"]) {
[currentTitle appendString:string];
} else if ([currentElement isEqualToString:@"link"]) {
[currentLink appendString:string];
} else if ([currentElement isEqualToString:@"description"]) {
[currentSummary appendString:string];
} else if ([currentElement isEqualToString:@"pubDate"]) {
[currentDate appendString:string];
}
- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock
{
NSString *someString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
}