IOS成长之路-解析xml数据
来源:互联网 发布:英国研究生申请 知乎 编辑:程序博客网 时间:2024/05/16 10:07
需要解析的 xml 数据:
<?xml version="1.0" encoding="UTF-8"?><Data><Movie><title>good lucky to you</title><box>111</box> <summary>This is a story</summary></Movie> <Movie><title>hello</title><box>99</box> <summary>oh,yes</summary></Movie> <Movie><title>who am i</title><box>22</box> <summary>chenglong</summary></Movie></Data>
通过 上上篇的博客《获取网络数据》 中描述的过程和程序我们可以得到网络上的数据,还可以在这个过程中把数据传递给进行解析数据的方法进行解析的操作,
//自定义一个 PraxMovie 方法,参数时NSDate型的数据,用来传递接受到的数据- (void)PraxMovie:(NSData*)_data { //NSXMLParser解析xml格式的数据,在这里初始化,并赋值NSXMLParser* parser = [[NSXMLParser alloc]initWithData:_data];parser.delegate = self;[parser parse];}
在解析之前我们要进行清空以前的数据,因为在运行程序的过程中我们有时候会运行多次,所以要删除旧的数据
(注意: 在这个程序中,我们用到了 Movie 和 MovieList 这两个类,Movie中存放的是三个属性[电影名称,票房,介绍],用来存放解析 xml 后得到的三个数据,
而 MovieList 类中定义了 一个可以改变的数组,用来存放 Movie 对象,并实现增加,删除,和查询数组中的 Movie对象的数量 等方法)
//解析前的准备- (void)parserDidStartDocument:(NSXMLParser *)parser{ //移出所有,对MovieList 类中的数组清空 MovieList *xmlMovielist;[self.xmlMovielist.moviearray removeAllObjects];[self.tempString setString:@""];}
查询所有的节点,并得到每一个节点中的数据
//查询节点,同时alloc 出一个Movie对象 ,用于储存数据- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedNameattributes:(NSDictionary *)attributeDict{if([elementName isEqualToString:@"Movie"]){self.newwMovie = nil;self.newwMovie= [[Movie alloc] init];[self.tempString setString:@""];}else{[self.tempString setString:@""];}}//找到节点数据,通过NSString对象来传递- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{if(![string isEqualToString:@""]){[self.tempString appendString:string];}}
然后把得到得得 节点 进行区分,并把得到得相应数据 存放到不同得 Movie属性 中
//根据查询到的节点,保存数据- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{if([elementName isEqualToString:@"Movie"]){ //存放到数组中[self.xmlMovielist Addmovie:self.newwMovie]; }else if([elementName isEqualToString:@"title"]){ //Movie 得title 属性self.newwMovie.title =[NSString stringWithString:self.tempString];}else if([elementName isEqualToString:@"box"]){ // Movie boxOfficeGross 属性int temp = [[NSString stringWithString:self.tempString]intValue];self.newwMovie.boxOfficeGross = [NSNumber numberWithInt:temp];}else if([elementName isEqualToString:@"summary"]){ //Movie 得 summary 属性self.newwMovie.summary =[NSString stringWithString:self.tempString];}}
当解析完最后一个节点后,解析结束,
//解析结束- (void)parserDidEndDocument:(NSXMLParser *)parser{ //遍历数组,输出每一个节点数据 for (id tmp in self.xmlMovielist.moviearray) { NSLog(@"tmp = %@",tmp); } self.newwMovie = nil;self.tempString = nil;}
解析得过程:
先执行查询节点的方法,然后执行得到节点中的数据的方法,接下来执行 区分节点进行保存数据 ,
<--------------------------
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
到-------》
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
再到-------》
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
------------------------------>
每一个节点都会把这三个方法执行一次,当一个节点遍历完后,再重新执行这一过程去遍历下一个节点,直到所有的节点都遍历完,最后执行:
- (void)parserDidEndDocument:(NSXMLParser *)parser
- IOS成长之路-解析xml数据
- IOS成长之路-解析xml数据
- IOS成长之路-用NSXMLParser实现XML解析
- iOS之数据解析之XML解析
- iOS之数据解析之XML解析
- IOS成长之路-JSON解析
- IOS成长之路-JSON解析
- IOS成长之路-JSON解析
- iOS中的数据解析之XML
- iOS 网络数据之XML解析
- iOS学习之解析XML数据
- iOS开发之解析XML格式数据
- iOS之数据解析 (JSON 、XML)
- iOS开发之解析XML数据
- Android成长之路-使用SAX解析XML
- Android成长之路-使用DOM解析XML
- Android成长之路-使用Pull解析XML
- iOS xml数据解析
- Java JSplitPane_1
- 【iOS-Cocos2d游戏开发之三】CCScene切换的所有特效(28种)以及设置屏幕横竖屏!
- 傲游3的广告过滤自定义规则【Mark一下】对CSS语法学习还是挺不错了~~可定义站点样式
- 渐 变
- Android layout xml总结
- IOS成长之路-解析xml数据
- 渐变 2
- java string举例说明1
- java string举例说明2
- java string举例说明3
- 对象引用与对象的区别
- java IO举例说明1
- [案例分析]抠抠族:省钱达人的“葵花宝典”
- 苦其心志,劳其筋骨