Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将NSXMLParser与CDATA一起使用_Iphone_Objective C_Nsxmlparser_Cdata - Fatal编程技术网

Iphone 将NSXMLParser与CDATA一起使用

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

我正在用NSXMLParser解析一个RSS提要,它对标题和其他字符串来说工作得很好,但其中一个元素是一个类似于

<!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];
}