2014-01-29 49 views
0

我正在使用NSXmlParserXML获取数据。在解析器委托方法我:无法使用NSXmlParser获取数据

- (void)resetPassCallback: (NSData*) data{ 
     NSLog(@"start parsing the data"); 
     NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithData:data]; 
     [nsXmlParser setDelegate:self]; 
     BOOL success = [nsXmlParser parse]; 
     if (success) { 
      NSLog(@"No errors %@", xmlArray); 
     } else { 
      NSLog(@"Error parsing document!"); 
     } 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qualifiedName attributes: (NSDictionary *)attributeDict 
{ 
     element = elementName; 
     if([elementName isEqualToString:@"User"]) 
     { 
     XmlDict = [[NSMutableDictionary alloc]init]; 
     userId =[[NSMutableString alloc]init]; 
     screenName =[[NSMutableString alloc]init]; 
     xmlArray = [[NSMutableArray alloc]init]; 
} 

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    NSLog(@"foundCharacters ::::: %@ :::: ", string); 
    [xmlArray addObject:string]; 
} 

虽然我能够分析数据,我没有得到完整的数据。在控制台上,日志显示:

foundCharacters ::::: 200 :::: 
foundCharacters ::::: f1f47453-04d7-20c8-a9e1-406fdc89a2da :::: 
foundCharacters ::::: test :::: 
foundCharacters ::::: 62e2092a-eb6e-44ad-7a7b-3deb976569c1 :::: 
foundCharacters ::::: Thomas :::: 
xmlArray contents : (
"62e2092a-eb6e-44ad-7a7b-3deb976569c1", 
Thomas 
) 

正如你可以看到,为什么我没有得到在xmlArray“测试”和其他值。

+0

发布完整的代码 – santhu

+0

你修改任何其他解析器的委托方法(S)'xmlArray'? – Akhilrajtr

回答

0

我希望Array的代码在每次NSXMLParser时都会重新发起。

您需要在调用NSXMLParser delegates 之前初始化阵列。

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qualifiedName attributes: (NSDictionary *)attributeDict 
{ 
    //Don't initialise your NSArray here 
    } 
} 

-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ 
    NSLog(@"foundCharacters ::::: %@ :::: ", string); 
    [xmlArray addObject:string]; 
} 
0

使用xmlArray = [[NSMutableArray alloc]init];

- (void)resetPassCallback: (NSData*) data{ 
    NSLog(@"start parsing the data"); 
    xmlArray = [[NSMutableArray alloc]init]; 
    NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithData:data]; 
    [nsXmlParser setDelegate:self]; 
    BOOL success = [nsXmlParser parse]; 
    if (success) { 
     NSLog(@"No errors %@", xmlArray); 
    } else { 
     NSLog(@"Error parsing document!"); 
    } 
} 

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qualifiedName attributes: (NSDictionary *)attributeDict 
{ 

} 
0

为什么使用mutableArray。简单地尝试这个

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

     if(!currentElementValue) 
       currentElementValue = [[NSMutableString alloc] initWithString:string]; 
     else 
       [currentElementValue appendString:string]; 

     NSLog(@"Processing Value: %@", currentElementValue); 

}