2012-01-16 5 views
0

で解析私はこれでxmlファイルを持っているNSXMLParser

-(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); 

NSString *name; 
NSString *subname; 
NSString *age; 

は、それが使用してイム行うために、

問題は、サブネームと年齢が決して表示されないことです。

+0

これらすべての行に設定されていますか?なぜTBXML(http://tbxml.co.uk)と呼ばれるより単純なライブラリを使用しないでください – Saurabh

答えて

1

name要素のNSMutableStringを作成するだけなので、ここではすべての要素をチェックする必要があります。

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

とリリース/ここにあなたのsoapResultsゼロ

、などは、非常に単純なXMLを解析するためにあなたの elementoEncontradoここ NO

-(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; 
} 
+0

Ok friend、ありがとう。この場合、NSStringを別のものにコピーするのが一番良い方法ですか? name = [copy soapResults]または[name release] name = [NSString stringWthString:theName] ???または他のフォーム? –

+0

私はその名前= [soapResultsコピー]と思います。うまくいくはずです。再度、ARCの下でない場合は、後でそれらのインスタンスを解放することを忘れないでください。 –