将具有相同名称的重复元素解析到NSArray中?
问题描述:
所有元素都存储在NSStrings中,除了存储在NSArray中的Dog。我想要将所有的狗条目添加到NSArray中。现在只有一个狗值被添加到数组中。我如何将所有的狗值添加到NSArray?将具有相同名称的重复元素解析到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;
}
答
原因是关键狗有多个值。
所以,如果你说:
[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 ,可读。