XML解析 JSON解析

来源:互联网 发布:奥卡福 知乎 编辑:程序博客网 时间:2024/05/02 02:34

解析:以约定好的方式,后台开发人员将数据进行存储,前端人员按照对应格式进行数据获取的过程.

数据格式是由后台人员决定,我们无权干涉

当今流行的数据格式:XMLJSON

对于我们来说,数据解析就是根据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
原创粉丝点击