0

xml ファイルを解析しました。
コンソールには解析された要素が正しく表示されていますが、配列には null が表示されています。

- (ParserClass *) initXMLParser 
{
    //[super init];

    appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    return self;
}

- (void)parser: (NSXMLParser *)parser   didStartElement:(NSString *) elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict {

    if([elementName isEqualToString:@"note"]) {
        //Initialize the array.
        appDelegate.testArray = [[NSMutableArray alloc] init];
    }
    else if([elementName isEqualToString:@"to"]) {

        aTest = [[Test alloc] init];
    }

    NSLog(@"Processing Element: %@", elementName);
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 

    if(!currentElementValue) 
        currentElementValue = [[NSMutableString alloc] initWithString:string];
    else
        [currentElementValue appendString:string];

    NSLog(@"Processing Value: %@", currentElementValue);

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName 
  namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

    if([elementName isEqualToString:@"Books"])
        return;

    if([elementName isEqualToString:@"note"]) {
        [appDelegate.testArray addObject:aTest];

        //[aBook release];
        aTest = nil;
    }
    else 
        [aTest setValue:currentElementValue forKey:elementName];

    //[currentElementValue release];
    currentElementValue = nil;
}

@end
4

1 に答える 1

0

初期化を次のように変更してみてください。

- (ParserClass *) initXMLParser {
    self=[super init];
    if(self !=nil){
    appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    // init array of user objects here
    appDelegate.testArray = [[NSMutableArray alloc] init];
    }
    return self;
}

そして、あなたのxmlが:

<books>
  <note>
    <something>cccc</something>
  </note>
  <note>
     <something>cccc</something>
  </note>
</books>

したがって、変更が必要です。

   -(void)parser: (NSXMLParser *)parser   didStartElement:(NSString *) elementName 
      namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName 
        attributes:(NSDictionary *)attributeDict {
        if([elementName isEqualToString:@"note"]) {
            aTest = [[Test alloc] init];
    //if you have attributes, you can extract them here: 
     // user.att = [[attributeDict objectForKey:@"<att name>"] ...];
        }
   NSLog(@"Processing Element: %@", elementName);
}

そして、配列を取得するには、次のようなことを行う必要があります。

//Data store your xml
    NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithData:Data];
        ParserClass *parser = [[ParserClass alloc] initXMLParser];
//delegate your parser
        [nsXmlParser setDelegate:parser];
//it's doing parsing
        BOOL success = [nsXmlParser parse];
        if (success)
        {
            NSMutableArray *someArray = [parser appDelegate.testArray ];
            NSLog(@"%@",someArray );
} else
    {
        NSLog(@"Error parsing document!");
    }

それを試してみてください、それは私のために働いています...

于 2013-02-06T22:37:29.817 に答える