2017-01-04 9 views
0

私はObjective-CとXMLに新しい機能を追加しました。NSXMLParserの結果が何度も何度も繰り返され、1つのアイテムが追加されました。

私はこのXMLファイルを持っています。 XML sample file

私は解析されたXMLをNSDictionaryに入れたいと思います。問題は結果が次のようなものであることです。result

結果を何度も何度も繰り返して1つずつ追加します。

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

if ([elementName isEqualToString:@"CATALOG"]) { 
    self.cd = [[NSMutableArray alloc]init]; 
} 
if ([elementName isEqualToString:@"CD"]){ 
    self.content = [[NSMutableDictionary alloc]init]; 
} 

self.ElementValue = [[NSMutableString alloc] init]; 

for (id key in attributeDict) { 
    NSLog(@"attribute %@", [attributeDict objectForKey:key]); 
} 

} 

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

self.ElementValue = [self.ElementValue stringByAppendingString:string]; 

} 

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

if (![elementName isEqualToString:@"CD"]){ 
    [self.content setObject:self.ElementValue forKey:elementName]; 
} else { 
    [self.cd addObject:self.content]; 
} 

NSLog(@"%@",self.cd); 

} 
+0

次のように修正し、あなたのコードに少し問題がある要素

- (void)parserDidEndDocument:(NSXMLParser *)parser { NSLog(@"\n\n\n\n\n"); NSLog(@"- - - - - - - - - - - - - Parsing Finished - - - - - - - - - - - - - "); NSLog(@"%@",self.cd); } 

の右の数を持っていることを確認してくださいXMLファイルまたはそのURL? –

+0

なぜブレークポイントを使用しないのですか? –

答えて

1

あなたのコードは正しいようですが、複数のNSLog出力と混同していると思います。 didEndElementが各要素に対して呼び出されるので、これは正常です。最終的な配列はparserDidEndDocumentメソッドに表示されます。

parserDidEndDocumentデリゲートメソッドを実装し、あなたの配列はまた、あなたが共有することができ

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
    [self.ElementValue appendString:string]; 

} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    if ([elementName isEqualToString:@"CD"]) { 
    [self.cd addObject:self.content]; 
    } 
    else if (![elementName isEqualToString:@"CATALOG"]) { 
    [self.content setObject:self.ElementValue forKey:elementName]; 
    } 
} 
+0

おかげで多くの仲間!とても有難い。 –

関連する問題