XML解析 JSON解析

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

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

当今流行的数据格式: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];




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值