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 に答える