我试图解析以下XML文件:

但是,当我解析它时:
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
currentElementName = elementName;
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if ([currentElementName isEqualToString:@"link"]) {
NSLog(@"Link: %@",string);
}
}我得到了以下NSLOG:
Link: http://www.flickr.com/photos/114014058@N06/
Link:
Link: http://www.flickr.com/photos/114014058@N06/
Link:
Link:
Link: http://www.flickr.com/photos/114014058@N06/11865861164/
Link:正如您所看到的,我想要的URL没有出现,并且有一堆空URL。
为什么?
谢谢!
编辑:
我尝试了有节奏的费斯曼的答案,但我得到的只是:
link is (null)
发布于 2014-01-11 21:55:42
尝试didStartElement回调。
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;当elementName是@"link"时,您的url应该在attributeDict[@"href"]中。
例如:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if([elementName isEqualToString:@"link"]) {
NSLog(@"link is %@\n", attributeDict[@"href"]);
}
}发布于 2014-01-11 22:02:52
您将在didStartElement中找到元素,因此在那里更改状态。当您得到foundCharacters时,检查您是否处于正确的状态,然后那里的字符就是您想要的。
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
// assume currentElementName starts out nil. if we find "generator", enter
// "generator" state. if we're in "generator" state and find "link" then enter
// "link" state, which is our target state
if ([currentElementName isEqualToString:@"generator"] && [elementName isEqualToString:@"link"])
currentElementName = @"link";
// now we're in the tag we want to be in. get attributes from
// the attributeDict, if you need the tag body, check for "link" state in foundChars
NSLog(@"here are the attributes we want %@", attributeDict);
else if ([elementName isEqualToString:@"generator"]) {
currentElementName = @"generator";
}
}https://stackoverflow.com/questions/21068086
复制相似问题