0

我在 xml 中的 php 响应属于这种类型

<users>
<username>myemail</username>
<password>mypass</password>
 </users>

现在这是我的 parseUrl 类

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

}

现在的问题是,attributeDict它给出了 0 对。该函数正在读取username, password and users意味着它可以进入这个循环

   if ( [elementName isEqualToString:@"username"] ) 
        {
            NSString *val = [attributeDict  objectForKey:@"username"] ;    
          return;
        }

但是我怎样才能检索这个节点的值呢?

4

2 回答 2

1

删除return语句

并且 attributeDict 总是包含属性。

例如

这里'id'是用户的属性。

要获取字符串值,您需要编写

//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);
   }
}
于 2012-09-18T07:14:11.527 回答
0

尝试这个

-(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);
}
于 2012-09-18T07:02:18.333 回答