Reputation: 444
I have a xml file with this:
<name>Alberto</name>
<subname>Martín</subname>
<age>24</age>
I want parser it with NSXMLParser and save data it in:
NSString *name;
NSString *subname;
NSString *age;
To do it im using:
-(void) parser:(NSXMLParser *) parser didStartElement:(NSString *)
elementName namespaceURI (NSString *) namespaceURI
qualifiedName:(NSString *) qName
attributes:(NSDictionary *) attributeDict {
if( [elementName isEqualToString:@"name"])
{
if (!soapResults)
{
soapResults = [[NSMutableString alloc] init];
}
elementoEncontrado = YES;
}}
-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string{
if (elementoEncontrado)
{
[soapResults appendString: string];
}
}
-(void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"name"])
{
name=soapResults;
}
if ([elementName isEqualToString:@"subname"])
{
subname=soapResults;
}
if ([elementName isEqualToString:@"age"])
{
age=soapResults;
}
NSLog(@"%@", name, subname, age);
The problem is that subname and age never appears...
Upvotes: 0
Views: 198
Reputation: 2605
You should check for all elements here, since you're only creating the NSMutableString for name
elements.
-(void) parser:(NSXMLParser *) parser didStartElement:(NSString *)
elementName namespaceURI (NSString *) namespaceURI
qualifiedName:(NSString *) qName
attributes:(NSDictionary *) attributeDict {
if( [elementName isEqualToString:@"name"])
{
if (!soapResults)
{
soapResults = [[NSMutableString alloc] init];
}
elementoEncontrado = YES;
}
}
and release / nil your soapResults
here, as well as set your elementoEncontrado
to NO
here
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if ([elementName isEqualToString:@"name"])
{
// copy or retain this, unless ARC.
name=soapResults;
}
if ([elementName isEqualToString:@"subname"])
{
subname=soapResults;
}
if ([elementName isEqualToString:@"age"])
{
age=soapResults;
}
NSLog(@"%@", name, subname, age);
[soapResults release];
soapResults = nil;
elementoEncontrado = NO;
}
Upvotes: 1