XML解析 JSON解析
来源:互联网 发布:奥卡福 知乎 编辑:程序博客网 时间:2024/05/02 02:34
解析:以约定好的方式,后台开发人员将数据进行存储,前端人员按照对应格式进行数据获取的过程.
数据格式是由后台人员决定,我们无权干涉
当今流行的数据格式:XML和JSON
对于我们来说,数据解析就是根据XML或者JSON的格式进行数据的读取
XML解析方式主要有两种: SAX解析和 DOM解析
SAX解析式系统提供的,是根据协议代理回调的方式进行数据的获取 .它在数据解析式,是将数据一条一条的进行读取解析,适合大型数据.
//创建字典 self.categoryDic = [NSMutableDictionary dictionary]; //1.获取文件路径 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Categories" ofType:@"xml"]; //2.读取文件内容 NSData *parserData = [NSData dataWithContentsOfFile:filePath]; //3.创建解析对象 NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //4.设置代理 parser.delegate = self; //5.解析 [parser parse];代理方法
#pragma mark - SAX解析 NSXMLParserDelegate//读取到开始标签-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ NSLog(@"%@",elementName); if ([elementName isEqualToString:@"category_name"]) { //创建对应分组 self.categoryArr = [NSMutableArray array]; } }//获取内容-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ NSLog(@"%@",string); //记录读取的内容 self.contentStr = string;}//读取到结束标签-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ NSLog(@"%@",elementName); if ([elementName isEqualToString:@"category_name"]) { //将对应分组 放入字典中 读取的内容 例如 美食 作为 key [_categoryDic setValue:_categoryArr forKey:_contentStr]; }else if([elementName isEqualToString:@"subcategories"]) { //就将读取的内容 放入数组 例如 四川菜 [_categoryArr addObject:_contentStr]; } }
DOM解析:一般我们使用由Google提供的第三方GDataXMLNode进行解析对于DOM解析,会将数据整个读入内存性能构成一个数树形结构
* 我们通过树形结构的层级进行数据的获取 适合小型数据
* 对于GDataXMLNode是在C语言动态链接库基础上进行OC语言的XML解析工具在使用时 我们需要进行三步配置
* 1.导入动态链接库 libxml2.2.lib
* 2.在Header Search Paths中配置 /usr/include/libxml2
* 3.在Other Linker中配置 -lxml2
//创建字典 承装解析后的数据 self.categoryDic = [NSMutableDictionary dictionary]; //1.获取文件路径 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Categories" ofType:@"xml"]; //2.读取文件内容 NSString *parseStr = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; //3.将需要解析的内容 读入 document GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithXMLString:parseStr options:0 error:nil]; //4.获取根节点 GDataXMLElement *rootElement = [document rootElement]; //5.获取子节点们// NSArray *elements = [rootElement elementsForName:@"status"];// GDataXMLElement *status = [elements firstObject];// NSString *statusValue = [status stringValue];// NSLog(@"%@",statusValue); NSArray *elements = [rootElement elementsForName:@"categories"]; //遍历每一个子节点 for (GDataXMLElement *element in elements) { //获取下一级的子节点们 NSArray *names = [element elementsForName:@"category_name"]; NSArray *subcategories = [element elementsForName:@"subcategories"]; //获取 叶子节点的值 NSString *categoryName = [[names firstObject] stringValue]; NSLog(@"--------%@---------",categoryName); //创建对应分组 NSMutableArray *group = [NSMutableArray array]; [_categoryDic setValue:group forKey:categoryName]; //遍历 子节点们 for (GDataXMLElement *element in subcategories) { //获取 叶子节点的值 NSString *subStr = [element stringValue]; NSLog(@"%@",subStr); //将值放入对应分组 [group addObject:subStr]; } } NSLog(@"%@",_categoryDic);
对于JSON数据解析我们有很多第三方工具 我们一般使用JSONKit他是通过给NSString,NSData添加分类的方式进行解析,在效率上仅次于系统提供的JSON解析
JSONKit类解析:
//1.获取文件路径 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"json"]; //2.读取文件内容 NSData *parserData = [NSData dataWithContentsOfFile:filePath]; //3.解析 NSArray *arr = [parserData objectFromJSONData];系统提供的JSON解析
//获取文件路径 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"大众点评数据" ofType:@"json"]; //获取文件内容 NSData *data = [NSData dataWithContentsOfFile:filePath]; //解析 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
0 0
- JSON解析,XML解析
- JSON解析、XML解析
- XML解析 JSON解析
- XML解析、Json解析
- JSON解析/XML解析
- XML解析 与 JSON 解析
- JSON解析和XML解析
- javaweb-xml解析&json解析
- JSON解析和XML解析
- XML解析、JSON解析入门
- xml和json解析
- 解析(xml,json)
- xml,json解析
- json和xml解析
- XML,JSON解析
- ruby解析json、xml
- [ios]xml, json解析
- xml json 解析
- Spinner 下拉框
- 笔试题:C语言中的字符串问题
- hdu~5025(bfs+状态压缩)
- ios开发-新浪微博-09(下拉菜单封装一)
- 计算机网络学习 :互联网与万维网的区别
- XML解析 JSON解析
- Effective C++——条款43(第7章)
- 调用系统的Camera和相册/压缩照片
- hdu 5023 A Corrupt Mayor's Performance Art(线段树+位运算)
- (新手向)幻想战境DEMO(二)
- Android 二维码扫描 YUV字节数组转换成bitmap
- Java语言的基础语法(二)
- ViewController的生命周期分析和使用
- Android学习笔记之——Spinner