zoukankan      html  css  js  c++  java
  • 数据解析(XML,JSON)

    XML文件有多种样式,标准的是把数据存在字节点上,还有的就是把数据直接存储在属性里面
     
    #import"ViewController.h"

    @interface ViewController ()<NSXMLParserDelegate>{
        NSMutableArray * listArr;
         NSString      *elementTag;
    }

    @end

    @implementation ViewController

    - (void)viewDidLoad {
        [super viewDidLoad];
       
        //1----获取工程中的资源
        NSString * path = [[ NSBundle mainBundle] pathForResource:@"student" ofType:@"xml"];
    //    NSLog(@"%@",path);
       
        //2----获取资源文件保存数据
        NSData * data = [NSData dataWithContentsOfFile:path];
    //    NSLog(@"%@",data);
       
        //3.---指定解析对象
        NSXMLParser * parper = [[NSXMLParser alloc] initWithData:data];
        parper.delegate = self;
        NSLog(@"%@",parper);
       
        //4.-- --开始解析
        [parper parse];
    }

    //5.----开始解析准备工作---(从头标签开始)
    -(void)parserDidStartDocument:(NSXMLParser *)parser{
        //一般在此方法进行数组或字典等对象的初始化
        listArr = [NSMutableArray  array];
    }

    //6.-----开始解析头标签
    -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
        //elementName 头标签名。attributeDict代表头标签所在<>=连接的内容
       
        elementTag = elementName;
        if ([elementName isEqualToString:@"User"]) {
           
            NSString * s = [attributeDict objectForKey:@"id"];
            NSMutableDictionary * dict = [NSMutableDictionary dictionary];
            [dict setObject:s forKey:@"id"];
            [listArr addObject:dict];
           
        }
    }

    //7.------获取标签存储的字符串
    -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
       
        NSMutableDictionary * dic = [listArr lastObject];
        if ([elementTag isEqualToString:@"name"] || [elementTag isEqualToString:@"age"]) {
            [dic setObject:string forKey:elementTag];
        }
    }

    //8.-----elementTag置空
    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
        //解析头标签结束之后,将elementTag置空,避免尾标签对foundCharacters造成的影响
        elementTag = nil;
    }

    //9.----准备结束解析工作---(在尾标签结束)-(void)parserDidEndDocument:(NSXMLParser *)parser{      
          for (NSMutableDictionary * dic in listArr) {       
                NSLog(@"-->%@,%@,%@",[dic objectForKey:@"id"],dic[@"name"],dic[@"age"]);
       }}
     
    ===================================================
    JSON解析
    1.先取出路径
    2.获取资源文件保存数据
    3.用系统自带库进行解析--(致此解析完成)
    4.取出:a.先取出最外层的数组或者字典  , b,然后一次往里面解析数组或者字典  c.  最后对数组或者字典进行遍历
     
     
    Weather.h
     
    #import <Foundation/Foundation.h>

    @interface Weather : NSObject

    @property (nonatomic,copy)NSString * raRadarde;
    @property (nonatomic,copy)NSString * SD;
    @property (nonatomic,copy)NSString * WD;
    @property (nonatomic,copy)NSString * WS;
    @property (nonatomic,copy)NSString * WSE;
    @property (nonatomic,copy)NSString * city;
    @property (nonatomic,copy)NSString * cityid;
    @property (nonatomic,copy)NSString * isRadar;
    @property (nonatomic,copy)NSString * njd;
    @property (nonatomic,copy)NSString * qy;
    @property (nonatomic,copy)NSString * temp;
    @property (nonatomic,copy)NSString * time;

    @end
     
    Weather.m
     
    #import "Weather.h"

    @implementation Weather

    -(NSString *)description{
        return [NSString stringWithFormat:@"%@%@ ,%@,%@ ,%@,%@,%@%@ ,%@,%@,%@,%@",_raRadarde,_SD,_WD,_WS,_WSE,_city,_cityid,_isRadar,_njd,_qy,_temp,_time];
    }
    @end
     
     
     
    ViewControl.h
     
    #import "ViewController.h"
    #import "Weather.h"
    @interface ViewController ()

    @end

    @implementation ViewController

    - (void)viewDidLoad {
        [super viewDidLoad];
       
       
        NSString * str = @"http://www.weather.com.cn/data/sk/101010100.html";
        NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:str]];
    //    NSLog(@"%@",data);
        id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    //    NSLog(@"%@",obj);
        NSDictionary *dataDic = [obj objectForKey:@"weatherinfo"];//取出最外层的字典
        NSLog(@"%@",dataDic);
    }

    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }

    @end
     
     
    //网络数据解析分为两种方式(XMLJSON),其中JSON使我们常用的比较简单的解析方式
    //JSON--解析步骤:
    //1--先取出文件路径
    //2--获取资源数据保存
    //3--用系统库自带的方式(NSJSONSerialization)进行解析,(致此解析完成)
    //--取出解析结果:a.先取出最外层的数组或者字典 b.然后依次往里面解析数组或者字典  c.最后对需要的数组或者字典进行遍历

    #import "ViewController.h"

    @interface ViewController ()

    @end

    @implementation ViewController

    - (void)viewDidLoad {
        [super viewDidLoad];
       
        //获取工程中的资源
        NSString * path = [[NSBundle mainBundle] pathForResource:@"json" ofType:@"json"];
        //将资源文件转换为data数据
        NSData * data = [NSData dataWithContentsOfFile:path];
       
        //用系统自带库进行解析(只能对数据进行解析)
        id  obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    //    NSLog(@"%@",obj);
        //取出url
        NSArray * arr = [obj objectForKey:@"student"];
        NSLog(@"%@",arr);
       
        for (NSMutableDictionary * dict in arr) {
    //        NSLog(@"%@",dict);
            NSString * str = dict[@"name"];
            NSLog(@"%@",str);
            NSString * str1 = dict[@"age"];
            NSLog(@"%@",str1);
            NSString * str2 = dict[@"scroe"];
            NSLog(@"%@",str2);
           
    //        NSLog(@"-->%@,%@,%@",dict[@"name"],dict[@"age"],dict[@"scroe"]);

        }
    }
  • 相关阅读:
    《人月神话》阅读笔记01
    第二次团队冲刺第八天
    第二次团队冲刺第七天
    第二次团队冲刺第六天
    找水王续
    团队第二次冲刺第五天
    第二次团队冲刺第四天
    原码, 反码, 补码 详解
    《用户故事与敏捷方法》阅读笔记06
    《用户故事与敏捷方法》阅读笔记05
  • 原文地址:https://www.cnblogs.com/yibadao/p/5022749.html
Copyright © 2011-2022 走看看