在objective-c中解析xml的多个元素

时间:2013-01-09 19:20:02

标签: objective-c xml xml-parsing

我需要在这种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;

2 个答案:

答案 0 :(得分:0)

在深入研究XML解析之前,我强烈建议使用GDataXMLNode(也可用作CocoaPod)

然后,要了解如何使用它,请查看本教程How To Read and Write XML Documents with GDataXML

我知道这并不能直接回答您的问题,但使用Google提供的这个库真的要简单得多。

答案 1 :(得分:0)

问题是,当你读完id2时,isName设置为NO,所以你并没有真正将它添加到你的数组中。

这是一系列行动:

  1. name元素开始;
  2. id1元素开始;
  3. id1元素结束;
  4. id2元素开始;
  5. id2元素结束;
  6. name元素结束。
  7. 在第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];
            }
    }