Objective c 将同名的重复元素解析到NSArray中?
除了存储在NSArray中的dog之外,所有元素都存储在NSString中。我希望所有的狗条目都被添加到NSArray中。现在只有一个dog值被添加到数组中。如何将所有狗值添加到NSArrayObjective c 将同名的重复元素解析到NSArray中?,objective-c,xml,xml-parsing,nsxmlparser,xcode4.5,Objective C,Xml,Xml Parsing,Nsxmlparser,Xcode4.5,除了存储在NSArray中的dog之外,所有元素都存储在NSString中。我希望所有的狗条目都被添加到NSArray中。现在只有一个dog值被添加到数组中。如何将所有狗值添加到NSArray <root> <element> <person>Jim<person/> <age>21<age/> <dog
<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;
}
吉姆
21
拉布拉多
小猎犬
约克郡梗
吉尔
50
拳击手
帕格
拉布拉多
小猎犬
约克郡梗
-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName
namespaceURI:(NSString*)namespaceURI限定名称:(NSString*)限定名称
属性:(NSDictionary*)属性指令{
if([elementName IsequalString:@“root”]){
//初始化数组。
appDelegate.entries=[[NSMutableArray alloc]init];
}
else if([elementName IsequalString:@“element”]){
//初始化条目。
anEntry=[[Entry alloc]init];
//在这里提取属性。
anEntry.entryID=[[attributeDict objectForKey:@“id”]integerValue];
NSLog(@“读取id值:%i”,一个entry.entryID);
}
NSLog(@“处理元素:%@”,元素名称);
}
-(void)解析器:(NSXMLParser*)解析器查找字符:(NSString*)字符串{
如果(!currentElementValue)
currentElementValue=[[NSMutableString alloc]initWithString:string];
其他的
[currentElementValue appendString:string];
NSLog(@“处理值:%@”,currentElementValue);
}
-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName
namespaceURI:(NSString*)namespaceURI限定名称:(NSString*)qName{
if([elementName IsequalString:@“root”])
返回;
if([elementName IsequalString:@“element”]){
[appDelegate.entries addObject:anEntry];
无入口=无;
}
其他的
[anEntry setValue:currentElementValue forKey:elementName];
currentElementValue=零;
}
原因是键狗有多个值。如果你说:
[anEntry setValue:currentElementValue forKey:elementName];
那么,这个键(EntEnNess)可能已经包含了一个值。你正在使用解析器,你已经理解了它是如何工作的,唯一的问题是你必须考虑所有的标签,而不仅仅是元素和根。
- (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;
}
在这种情况下,条目类应该有一个名为dogs的属性,它是一个NSMutableArray,可读