I need to parse multiple elements (id1 and id2) in such kind of xml:
<name> <id1>104634449</id2> <id2>22014870</id2> </name> <name> <id1>104634433</id2> <id2>220143210</id2> </name>
I use such code:
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
isName = [elementName isEqualToString:@"name"];
isId1 = [elementName isEqualToString:@"id1"];
isId2 = [elementName isEqualToString:@"id2"];
if(isName){
name = [Name new];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if (isName){
[names addObject:name];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (isId1){
[name setId1:string];
}
if (isId2){
[name setId2:string];
}
}
But only one element (id1 or id2) is set in object name. What I do wrong?
In debug I get this:
id1 = @”\n”
id2 = @”22014870″
The problem is that when you finish to read id2 isName is set to NO, so you don’t really add it to your array.
This is the sequence of actions:
At point 4 occurs the last assignment of isName, set to:
Which will result false.
The corrected code: