我需要在这种xml:
中解析多个元素(id1和id2)<name> <id1>104634449</id2> <id2>22014870</id2> </name> <name> <id1>104634433</id2> <id2>220143210</id2> </name>
我使用这样的代码:
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
isName = [elementName isEqualToString:@"name"];
isId1 = [elementName isEqualToString:@"id1"];
isId2 = [elementName isEqualToString:@"id2"];
if(isName){
name = [Name new];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if (isName){
[names addObject:name];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (isId1){
[name setId1:string];
}
if (isId2){
[name setId2:string];
}
}
但是在对象名中只设置了一个元素(id1或id2)。我做错了什么?
在调试中,我得到了这个: id1 = @&#34; \ n&#34; id2 = @&#34; 22014870&#34;
答案 0 :(得分:0)
在深入研究XML解析之前,我强烈建议使用GDataXMLNode(也可用作CocoaPod)
然后,要了解如何使用它,请查看本教程How To Read and Write XML Documents with GDataXML
我知道这并不能直接回答您的问题,但使用Google提供的这个库真的要简单得多。
答案 1 :(得分:0)
问题是,当你读完id2时,isName设置为NO,所以你并没有真正将它添加到你的数组中。
这是一系列行动:
在第4点发生isName的最后一次分配,设置为:
isName = [elementName isEqualToString:@"name"];
哪个会导致错误。
更正后的代码:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString: @"name"){
[names addObject:name];
}
}