ios XML/Jason数据解析
来源:互联网 发布:台式电脑品牌推荐知乎 编辑:程序博客网 时间:2024/05/01 15:52
Sax解析是一种占用内存较小的解析方式,sax解析是随着文件的读取过程一条一条解析,一旦解析过程中文件出现错误,错误前所有的解析过的是可以保存的。
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"]]; }
0 0
- ios XML/Jason数据解析
- iOS四种方法解析Jason数据
- Jason数据解析求解?
- Jason数据解析求解?
- C# 解析 Json(Jason)数据
- iOS xml数据解析
- iOS解析xml数据
- Jason和xml文件的解析
- 传送自定义jason数据并解析处理
- Android Jason数据解析及显示
- 解析接口返回的jason数据
- iOS 数据解析 JSON XML
- iOS XML,JOSN数据解析
- jason解析
- iOS之数据解析之XML解析
- iOS之数据解析之XML解析
- Swift中用NSURLConnection解析URL,并解析Jason数据
- Swift中用NSURLConnection解析URL,并解析Jason数据
- A.jsp跳转到B.jsp传递值方法的扩展(结合jquery mobile)
- MIME协议分析
- ios define NSLog debug 应用发布nslog注释
- 用RVCT编译STM32点亮LED
- LayoutParams的用法
- ios XML/Jason数据解析
- Android的所有permission
- Native Driver的搭建及使用
- 黑客帝国数字矩阵效果
- rhadoop安装
- Undefined symbols for architecture i386或者armv7: “_OBJC_CLASS_$_XXX”
- 中央所巡视7地均有干部选拔任用问题 湖南最突出
- iOS BLOCK
- 数据库常用的内部查询