NSXMLParser 预期结果一遍又一遍地重复并一次添加 1 个项目
NSXMLParser expected result is repeated over and over and adding 1 item at time
我是 Objective-C 和 XML 的新手,请帮助我解决我的简单问题。
我有这个 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);
}
您的代码似乎是正确的,我猜您对多个 NSLog
输出感到困惑。这是正常的,因为 didEndElement
将为每个元素调用。您应该在 parserDidEndDocument
方法中看到您的最终数组。
请实施 parserDidEndDocument
委托方法并确保您的数组具有正确数量的元素
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"\n\n\n\n\n");
NSLog(@"- - - - - - - - - - - - - Parsing Finished - - - - - - - - - - - - - ");
NSLog(@"%@",self.cd);
}
你的代码也有一点问题更正如下
- (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];
}
}
我是 Objective-C 和 XML 的新手,请帮助我解决我的简单问题。
我有这个 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);
}
您的代码似乎是正确的,我猜您对多个 NSLog
输出感到困惑。这是正常的,因为 didEndElement
将为每个元素调用。您应该在 parserDidEndDocument
方法中看到您的最终数组。
请实施 parserDidEndDocument
委托方法并确保您的数组具有正确数量的元素
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"\n\n\n\n\n");
NSLog(@"- - - - - - - - - - - - - Parsing Finished - - - - - - - - - - - - - ");
NSLog(@"%@",self.cd);
}
你的代码也有一点问题更正如下
- (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];
}
}