问题
My php response in xml is of this type
<users>
<username>myemail</username>
<password>mypass</password>
</users>
Now this is my parseUrl class
NSURL *parserUrl = [[[NSURL alloc] initWithString:urlString] autorelease];
NSXMLParser *parser = [[[NSXMLParser alloc] initWithContentsOfURL:parserUrl] autorelease];
[parser setDelegate:self];
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
if ( [elementName isEqualToString:@"users"])
{
return;
}
if ( [elementName isEqualToString:@"username"] )
{
NSString *val = [attributeDict objectForKey:@"username"] ;
return;
}
}
Now the problem is, the attributeDict is giving 0 pairs. The function is reading username, password and users meaning it can get inside this loop
if ( [elementName isEqualToString:@"username"] )
{
NSString *val = [attributeDict objectForKey:@"username"] ;
return;
}
But how can i retrieve the value of this node?
回答1:
remove return statment
and attributeDict is alway contain attributes.
e.g.
here 'id' is attribute of user.
to getting string value, you need to write
//take string variable in header file 'elementname'
NSString *elementname;
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
elementname = elementName;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
elementname = elementName;
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if([elementname isEqualToString:@"username"])
{
NSLog(@"username : %@",string);
}
else if([elementname isEqualToString:@"password"])
{
NSLog(@"password : %@",string);
}
}
回答2:
try this
-(void) parserDidStartDocument:(NSXMLParser *)parser
{
list = [[NSMutableArray alloc] init];
resultArray = [[NSMutableArray alloc] init];
currentElementValue = [[NSMutableString alloc] init];
}
-(void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
{
currentElementName = [elementName copy];
if([elementName isEqualToString:@"username"])
{
list = [[NSMutableArray alloc] init];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if([elementName isEqualToString:@"username"])
{
[resultArray addObject: currentElementValue];
}
}
-(void) parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"Result Array= %@",resultArray);
NSLog(@"list Array= %@",list);
}
来源:https://stackoverflow.com/questions/12471774/cant-retrieve-xml-values-using-nsxmlparser