2012-11-30 3 views
2

모든 요소는 NSArray에 저장되는 dog를 제외하고 NSStrings에 저장됩니다. 모든 개 항목을 NSArray에 추가하려고합니다. 지금은 하나의 개 값만 배열에 추가됩니다. NSArray에 모든 dog 값을 어떻게 추가 할 수 있습니까?NSArray에 같은 이름의 중복 요소를 구문 분석합니까?

<root> 
     <element> 
       <person>Jim<person/> 
       <age>21<age/> 
       <dog>Labrador<dog/> 
       <dog>Beagle<dog/> 
       <dog>Yorkshire Terrier<dog/> 
     <element/> 
     <element> 
       <person>Jill<person/> 
       <age>50<age/> 
       <dog>Boxer<dog/> 
       <dog>Pug<dog/> 
       <dog>Labrador<dog/> 
       <dog>Beagle<dog/> 
       <dog>Yorkshire Terrier<dog/> 
     <element/> 
    </root> 


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

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

      //Initialize the entry. 
      anEntry = [[Entry alloc] init]; 

      //Extract the attribute here. 
      anEntry.entryID = [[attributeDict objectForKey:@"id"] integerValue]; 

      NSLog(@"Reading id value :%i", anEntry.entryID); 
     } 

     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:@"root"]) 
      return; 


     if([elementName isEqualToString:@"element"]) { 
      [appDelegate.entries addObject:anEntry]; 

      anEntry = nil; 
     } 
     else 
      [anEntry setValue:currentElementValue forKey:elementName]; 

     currentElementValue = nil; 
    } 

답변

0

이유는 키 도그에 대해 여러 개의 값이 있기 때문입니다.
은 당신이 말하는 그래서 경우 :

[anEntry setValue:currentElementValue forKey:elementName]; 

그런 다음 키 (가 elementName)가 이미, 당신이 어떻게 작동하는지 이해 잘 파서 사용되는 value.You을 포함 할 수있는 유일한 것은 당신이 모든 생각해야한다는 것입니다 태그뿐만 아니라 요소 root.In 당신은 또한 태그가 개 인 경우를 고려해야합니다 then.else 경우-:

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

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


    if([elementName isEqualToString:@"element"]) { 
     [appDelegate.entries addObject:anEntry]; 

     anEntry = nil; 
    } 
    else if([elementName isEqualToString: @"dog"]) 
    { 
     [anEntry.dogs addObject: currentElementValue]; 
    } 
    else 
     [anEntry setValue:currentElementValue forKey:elementName]; 

    currentElementValue = nil; 
} 

있는 NSMutableArray 당신의 엔트리 클래스는 속성 이름이 개를해야한다이 경우 , 읽을 수있는.

관련 문제