Question

I am using NSXmlParser to get data from XML. In the parser delegate method I have:

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

Although I am able to parse the data, I am not getting the complete data. In the console, the log shows:

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
)

As you can see, why am I not getting the “test” and other values in the xmlArray.

Was it helpful?

Solution 2

I hope that, the Array is getting re-initialed at every time of NSXMLParser delegates called .

You need to initialise the Array, before the NSXMLParser delegates called.

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

OTHER TIPS

why use for mutableArray. simply try this

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

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

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

}

Use xmlArray = [[NSMutableArray alloc]init]; in

- (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!");
    }
}

not in

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

}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top