2017-01-04 11 views
0

임이 추가되었습니다. 간단한 문제로 도와주세요.NSXMLParser 예상 결과가 반복해서 반복되고 Objective-C와 XML에 새로운

이 XML 파일이 있습니다. XML sample file

구문 분석 된 XML을 NSDictionary에 넣으 려합니다. 결과는 다음과 같습니다. result

결과를 한 번에 하나씩 반복하여 반복합니다.

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

많은 감사합니다! 매우 감사. –