ios XML/Jason数据解析
2014-02-26 19:48
399 查看
Sax解析是一种占用内存较小的解析方式,sax解析是随着文件的读取过程一条一条解析,一旦解析过程中文件出现错误,错误前所有的解析过的是可以保存的。
Dom解析把dom全部文件读入到内存中,然后使用dom的api遍历所有数据,检索想要的数据,这种方式比较消耗内存,对于手机应用来说并不推荐,而且一旦文件中有错误,Dom解析是无法解析数据的。
相对于sax解析,Dom比较直观,简单。在xml文档比较小的情况下也可以考虑使用dom方式。
Sax解析一般用到下面两个协议:
下面开始Dom解析的代码演示
最后是Jason解析 看完上面的这个就很简单了
Dom解析把dom全部文件读入到内存中,然后使用dom的api遍历所有数据,检索想要的数据,这种方式比较消耗内存,对于手机应用来说并不推荐,而且一旦文件中有错误,Dom解析是无法解析数据的。
相对于sax解析,Dom比较直观,简单。在xml文档比较小的情况下也可以考虑使用dom方式。
//开始解析 -(void)starParser { //获取路径 NSString * path = [[NSBundle mainBundle] pathForResource:@"citys" ofType:@"xml"]; NSData * data = [[NSData alloc] initWithContentsOfFile:path]; NSXMLParser * paster= [[NSXMLParser alloc] initWithData:data]; // 现在去写协议 paster.delegate = self; // 设置代理 // 开始解析 [paster parse]; }协议前先建一个Model,一个数组用来存放获取的内容
Sax解析一般用到下面两个协议:
//开始的协议 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { // 从字段kCity开始 if ([elementName isEqualToString:kCity]) { // model中添加数据 Model_sax * sax = [[Model_sax alloc] init]; // 创建一个大数组 接受model [_array addObject:sax]; [sax release]; } // 给model的属性赋值开始了 if ([elementName isEqualToString:kName]) { Model_sax * sax = [_array lastObject]; sax.name = [attributeDict objectForKey:@"data"]; } if ([elementName isEqualToString:klatitude_e6]) { Model_sax * sax = [_array lastObject]; sax.latitude_e6 = [attributeDict objectForKey:@"data"]; } if ([elementName isEqualToString:@"longitude_e6"]) { Model_sax * sax = [_array lastObject]; sax.longitude_e6 = [attributeDict objectForKey:@"data"]; } }
//结束协议 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { // 当字段是cities时候结束添加 把数组传给视图控制器( 代理传值吧) if ( [elementName isEqualToString:kCities]) { [self.mydelegate saxParserFinshWithArr:_array]; _secdArrblock(_array); } }这样一次简单的xml 解析就完成了!
下面开始Dom解析的代码演示
-(void)DomPaeserAttributes { NSString * path = [[NSBundle mainBundle]pathForResource:@"citys" ofType:@"xml"]; NSData * data = [NSData dataWithContentsOfFile:path]; NSError * error = Nil; GDataXMLDocument * document = [[GDataXMLDocument alloc] initWithData:data options:GDataXMLDocumentKind error:&error]; if (error) { NSLog(@"error===%@",error); } // 获得根节点 GDataXMLElement * element= [document rootElement]; GDataXMLElement * citys = [[element children] lastObject]; NSArray * cityarr = [citys children]; for (GDataXMLElement * elements in cityarr) { Model_dom * dom = [[Model_dom alloc] init]; [_arr addObject:dom]; NSArray * descriptarr = [elements children]; for (GDataXMLElement * value in descriptarr) { if ( [[value name]isEqualToString:@"name"]) { // 获得节点中属性的 内容 GDataXMLNode *node = [value attributeForName:@"data"]; NSString * str = [node stringValue]; Model_dom * domvalue = [_arr lastObject]; domvalue.name = str; } if ( [[value name]isEqualToString:@"latitude_e6"]) { // 获得节点中属性的 内容 GDataXMLNode *node = [value attributeForName:@"data"]; NSString * str = [node stringValue]; Model_dom * domvalue = [_arr lastObject]; domvalue.latitude_e6 = str; } if ( [[value name]isEqualToString:@"longitude_e6"]) { // 获得节点中属性的 内容 GDataXMLNode *node = [value attributeForName:@"data"]; NSString * str = [node stringValue]; Model_dom * domvalue = [_arr lastObject]; domvalue.longitude_e6 = str; } } } }
最后是Jason解析 看完上面的这个就很简单了
-(void)JsonParser { NSString * path = [[NSBundle mainBundle]pathForResource:@"citys" ofType:@"txt"]; // 依然获取路径 NSData * data = [NSData dataWithContentsOfFile:path]; NSError * error = Nil; // 获取里面的内容 NSDictionary * dic= [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:&error]; if (error) { NSLog(@"error jason ===%@",error); } NSLog(@"jason dic ==%@",dic); [_arr addObjectsFromArray:[dic objectForKey:@"cities"]]; }
相关文章推荐
- iOS之数据解析 (JSON 、XML)
- iOS学习笔记(九)—— xml数据解析
- iOS 数据解析 JSON XML
- iOS开发网络篇之Web Service和XML数据解析
- iOS开发之解析XML数据
- ios解析XML和json数据
- ios 解析xml 并且运用了字典和可变数组存放数据
- ios开发系列之XML解析和JSON解析数据
- iOS学习笔记(九)—— xml数据解析
- [iOS] dom解析xml数据,拿到<>里面的值
- IOS 解析XML数据
- iOS中的XML数据解析交换格式
- iOS开发3-使用DOM(GData)解析XML数据
- iOS解析xml数据
- iOS 网络数据之XML解析
- 【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据 推荐
- 【iOS开发-95】JSON反序列化、XML数据解析以及主线程中的UI更新等小细节
- iOS开发:xmpp下的xml数据解析及修改上传
- iOS四种方法解析Jason数据
- IOS学习之十六:网络数据的XML解析