2013-11-25 28 views

回答

0

所需完全一样的东西,你猜这是一个老问题,但我会记下我已经实现:

- (void) parserDidStartDocument:(NSXMLParser *)parser 
{ 
    NSLog(@"parserDidStartDocument"); 
    self.errorParsingDictionary = [NSMutableDictionary dictionary]; 
    self.nodeStack = [NSMutableArray array]; 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    NSLog(@"didStartElement --> %@", elementName); 
    [self.nodeStack addObject:elementName]; // Push 
    NSString *currentPath = [self pathFromNodeStack]; 
// [self.errorParsingDictionary setObject:[NSMutableDictionary dictionary] 
//         forKey:currentPath]; 
    [self.errorParsingDictionary setValue:[NSMutableDictionary dictionary] 
           forKeyPath:currentPath]; 
} 

-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    NSLog(@"foundCharacters --> %@", string); 
    NSString *currentPath = [self pathFromNodeStack]; 
// NSMutableString *mutableString = [self.errorParsingDictionary objectForKey:currentPath]; 
    id nodeValue = [self.errorParsingDictionary valueForKeyPath:currentPath]; 
    NSMutableString *nodeString = nil; 
    if (nil==nodeValue || ![nodeValue isKindOfClass:[NSString class]]) 
    { 
     nodeString = [NSMutableString string]; 
//  [self.errorParsingDictionary setObject:mutableString 
//          forKey:currentPath]; 
     [self.errorParsingDictionary setValue:nodeString 
            forKeyPath:currentPath]; 
    } 
    [nodeString appendString:string]; 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 

    NSLog(@"didEndElement --> %@", elementName); 
    [self.nodeStack removeObjectAtIndex:[self.nodeStack count]-1]; // Pop 
} 

- (void) parserDidEndDocument:(NSXMLParser *)parser 
{ 
    NSLog(@"parserDidEndDocument"); 
    self.nodeStack = nil; 
} 

-(NSString*)pathFromNodeStack 
{ 
    NSMutableString *path = [NSMutableString string]; 
    for (int i=0; i<self.nodeStack.count; i++) 
    { 
     [path appendString:[self.nodeStack objectAtIndex:i]]; 
     if (i!=self.nodeStack.count-1) 
     { 
      // If it is not the last object 
      [path appendString:@"."]; 
     } 
    } 
    return path; 
} 

分析完成后,您现在可以使用字典:self.errorParsingDictionary得到任何路径的值,如下所示:

NSString *nodeValue = [self.errorParsingDictionary valueForKeyPath: @"items.items.name"]; 

希望这会有所帮助。

相关问题