如何在iphone编程中使用nsxmlparser和多个节点的相同名称解析xml?

时间:2011-10-01 04:50:09

标签: iphone nsxmlparser

如果需要所有图像,我如何使用NSXMLParser解析

<title>Title</title>
<description>my description is here </description>

<images>

<image>http://www.sosmoths.com/mothImages/800px-Tineola.bisselliella.7218.jpg</image>

<image>http://www.sosmoths.com/mothImages/800px-Tineola.bisselliella.mounted.jpg</image>

<image>http://www.sosmoths.com/mothImages/800px-XN_Tineola_bisselliella_1.jpg</image>

<image>http://www.sosmoths.com/mothImages/Tineola_bisselliella.JPG</image>

</images>

有更多节点如title,description,所以如何解析这样的xml,我对图像节点感到困惑,我想为此使用NSMutableArray,但仍然不清楚做代码?

3 个答案:

答案 0 :(得分:4)

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
                                  namespaceURI:(NSString *)namespaceURI
                                 qualifiedName:(NSString *)qName

{

if ([elementName isEqualToString:"<image>"])
        {
            [imagearray addObject:imageurl];

        }

}

在此之前,您需要找到元素名称,然后执行上面的代码。这可能会对您有所帮助。

答案 1 :(得分:3)

use this it work

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict{
    NSLog(@"%@",elementName);
    if([elementName isEqualToString:@"moths"]){
        mytblarray=[[NSMutableArray alloc] init];
    } else if([elementName isEqualToString:@"moth"]){
        tmpdic=[[NSMutableDictionary alloc] init];
    }
    else if([elementName isEqualToString:@"images"]){
        imgArray=[[NSMutableArray alloc] init];
    }

}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{

    if(tmpstr!=nil && [tmpstr retainCount]>0){ [tmpstr release]; tmpstr=nil; }
    tmpstr=[[NSString alloc] initWithString:string];

}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    if([elementName isEqualToString:@"moth"]){
        [mytblarray addObject:tmpdic];
        [tmpdic release];
    }if([elementName isEqualToString:@"images"]){
        [tmpdic setValue:imgArray forKey:elementName];
    }
    else if([elementName isEqualToString:@"image"]){
        [imgArray addObject:tmpstr];        
    }
}

答案 2 :(得分:1)

  1. 在initWithData中取词典:methode
  2. 将值视为标题,描述的关键字
  3. 在didStartElement方法中,在图像标签中分配image_array
  4. 在didEndElement方法中,在图片标记中将您的数据(此处为您的图片链接)添加到image_array
  5. 现在在didEndElement方法中,在images标签中将该数组添加到主词典中作为关键图像
  6. 这就是.....