一. XML的SAX解析
1).SAX解析  
1. 遵守协议
     @interfaceRootViewController ()<NSXMLParserDelegate>
2. 声明属性
// 声明一个属性  可变数组存放model
     @property (nonatomic,retain)NSMutableArray *dataArray;
     // 需要声明一个model 的属性
     @property (nonatomic,retain)StudentModel *model;
     // 声明一个字符串  用来保存数据的内容
     @property (nonatomic,retain)NSString *str;
   
3.  NSXMLParser 分析XML文件
- (void)setUpDataXMLParser
{
     *  XML 的 SAX 解析
    // Path
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    // NSData
    NSData *data = [NSData dataWithContentsOfFile:path];
    // 创建一个分析人 类
    NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];
    // 设置代理
    parser.delegate = self;
    // 解析数据(开始分析) 利用代理协议方法 进行数据分析
    [parser parse];
    // 我在这里释放  行不行???
    NSLog(@"我在这里释放  行!");
    // 内存管理
    [parser release];
}
  4.
 *1. 把数据取出来
 *2. 装进Model
 *3. 把Model装进数组 备用
#pragma mark -- NSXMLParser代理方法
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
    NSLog(@"开始分析文件");
    // 初始化数组
    self.dataArray = [NSMutableArray array];
}
// 找节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
   // NSLog(@"开始遇到节点");
    NSLog(@"<%@>", elementName);
    // 初始化model
    if ([elementName isEqualToString:@"Student"]) {
        self.model = [[StudentModel alloc]init];
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
   // NSLog(@"发现字符触发");
    NSLog(@"%@", string);
    self.str = string;

}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
   // NSLog(@"遇到节点结束触发");
    NSLog(@"</%@>", elementName);
    if ([elementName isEqualToString:@"name"]) {
        self.model.name = self.str;
    } else if ([elementName isEqualToString:@"gender"]) {
        self.model.gender = self.str;
    } else if ([elementName isEqualToString:@"age"]) {
        self.model.age = self.str;
    } else if ([elementName isEqualToString:@"motto"]) {
        self.model.motto = self.str;
    } else if ([elementName isEqualToString:@"Student"]) {
        // 节点名等于Student的时候 一个model就赋值完成了 这时候 装进数组里
        [self.dataArray addObject:self.model];
        [_model release];
    }

}
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"已经结束分析文件");
    NSLog(@"%@", self.dataArray);
}
2).DOM解析  (关于文件详细配置及其他  请查阅     GDataXMLNode.m)
1.  使用GDataXmlNode 这个类库 来实现
    直接导入类库 会报错  报错的原因 : GDataXmlNode 基于libxml 来写的
          必须把libxml 导入
2.
- (void)setUpDataGDataXmlNode
{
    // 创建路径
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Student" ofType:@"xml"];
    // NSData
    NSData *data = [NSData dataWithContentsOfFile:path];
   
    // 利用XMLNode类 进行DOM 解析
    // 用data 初始化管理文件 的对象  转化成树形结构    error 如果解析失败的话可以打印出理由
    // 创建空的错误信息
    NSError *error = nil;
    GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData:data options:0 error:&error];
    // 获取根节点
   
    GDataXMLElement *rootElement = [document rootElement];
   
    // 从根节点开始打印 把所有的东西都打印出来了
    NSLog(@"%@", rootElement);
   
    // 获取根节点下Student节点
    NSArray *Studentrray = [rootElement elementsForName:@"Student"];
   
    NSLog(@"%@", Studentrray);
    // 遍历Student节点的数组
    self.dataArray = [NSMutableArray array];

for (int i = 0; i < Studentrray.count; i++) {
        // 取出每一个学生节点
        GDataXMLElement *oneStudentElement = Studentrray[i];
        // 取出oneStudentElement 节点下的name 数组
        NSArray *nameArray = [oneStudentElement elementsForName:@"name"];
        // 取出name 节点
        GDataXMLElement *nameElement = nameArray [0];
        // 转化为字符串
       NSString *name = [nameElement stringValue];
        NSLog(@"%@", name);
       
        NSString *gender = [self backStringWithElement:oneStudentElement Forname:@"gender"];
        NSLog(@"%@", gender);
        NSString *age = [self backStringWithElement:oneStudentElement Forname:@"age"];
        NSLog(@"%@", age);

NSString *motto = [self backStringWithElement:oneStudentElement Forname:@"motto"];
        NSLog(@"%@", motto);
       
        // 给Model 赋值初始化一个model
        StudentModel *model = [[StudentModel alloc]init];
        model.name = name;
        model.gender = gender;
        model.age = age;
        model.motto = motto;
        [self.dataArray addObject:model];
       
        [model release];
    }
    NSLog(@"%@", self.dataArray);
}

// 将取出名字的方法封装起来
- (NSString *)backStringWithElement:(GDataXMLElement *)element Forname:(NSString *)name
{
    NSArray *array = [element elementsForName:name];
    GDataXMLElement *element1 = array [0];
    return [element1 stringValue];

}
二.JSON解析
1). Json 解析
- (void)setUpJson
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Teacher" ofType:@"json"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    // 把data 转化成可变数组或者可变字典  是字典还是数组 要看json 最外层是什么.
    // 使用 jsonKit 来解析数据
    //NSMutableArray *jsonArray =[data objectFromJSONData];
  //  NSJSONSerialization     json解析使用的类
    NSMutableArray *dataArray = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
    // 剥香蕉
    self.dataArray = [NSMutableArray array];
    for (NSDictionary *dic in dataArray) {
        TeacherModel *model = [[TeacherModel alloc]init];
        [model setValuesForKeysWithDictionary:dic];
        [self.dataArray addObject:model];
        [model release];
    }
    NSLog(@"%@", self.dataArray);
}
2). - (void)setUpdata
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"area" ofType:@"json"];
    NSData *data = [NSData dataWithContentsOfFile:path];
    NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];
   
    self.dataArray = [NSMutableArray array];
    for (NSDictionary *dic in jsonArray) {
        CityModel *model = [[CityModel alloc]init];
        [model setValuesForKeysWithDictionary:dic];
        [self.dataArray addObject:model];
        NSLog(@"%@", model.province);
        [model release];
    }
    NSLog(@"%@", self.dataArray);

UI一揽子计划 15 (XML的解析方式 (SAX解析/ DOM解析) 、JSON 解析)相关推荐

  1. UI一揽子计划 16 (网络编程、HTTP协议、iOS 实现网络编程、服务器接口)

    一.GET 请求方法 1.get同步请求 // Get同步请求 - (void)actionLeftButton:(UIBarButtonItem *)leftButton {     // 创建网址 ...

  2. Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)

    Java的xml解析器库有很多,总的来说,万变不离其宗的就是SAX和DOM解析器. SAX的包是org.xml.sax DOM的包是org.w3c.dom 1) DOM DOM 是用与平台和语言无关的 ...

  3. python自动解析json_JsonParser–使用python编写的json解析器

    最近在练习python,于是尝试使用python编写json解析器,目前已经大体实现,通过了jsonTestFile.txt中的测试例子.代码github网址为:https://github.com/ ...

  4. gson解析天气json_几种常用JSON解析库性能比较

    PS:公众号推文时间工作日早晨8点50分,周末下午3点30分,不见不散哈! 作者:飞污熊 xncoding.com/2018/01/09/java/jsons.html 本篇通过JMH来测试一下Jav ...

  5. UI一揽子计划 19 (数据库管理系统、SQL语句、iOS 的数据库实现技术)

    一.数据库管理系统 1. 以一定的方式存储在一起; 2. 能为多个用户共享 3. 具有尽可能小的冗余度 4. 与程序彼此独立的数据集合 二.SQL语句 SQlite常用语句 注:SQlite语句 不区 ...

  6. UI一揽子计划 9 (UITableView 、UITableView 、重用机制)

    一. UITableView UITableView继承自UIScrollView,所以可以滚动 表视图的每⼀一条数据都是显示在UITableViewCell对象中 表视图可以分区显⽰示数据,每个分区 ...

  7. UI一揽子计划 1 (UIView UILabel)

    第一天 1.UIView ·建立一个空模板后,首先将ARC模式关闭,因为iOS采用MRC模式,即手动管理内存. ·重写dealloc方法. - (void)dealloc { [_window rel ...

  8. UI一揽子计划 2 (UITextField  UIButton)

    UItextField 一.创建一个UITextField时候默认就弹出键盘     1 对齐方式     textField.textAlignment = NSTextAlignmentCente ...

  9. UI一揽子计划 24 (MVC、通知、)

    一.MVC  Model - View - Controller 即  模型 - 视图 - 控制器 Modle (模型) 存储 处理数据 为应用程序提供数据. View (视图)展示用户界面视图,提供 ...

最新文章

  1. App设计灵感之十二组精美的机票预订App设计案例
  2. b g opencv读入的图片 r_OpenCV提取显示一张图片(或者视频)的R,G,B颜色分量
  3. 最优化学习笔记(四)——最速下降法
  4. springbatch开启任务的两种方式
  5. 使用Python和Perl绘制北京跑步地图
  6. Ubuntu 16.04重启Nautilus
  7. 【全网世界区划最全整理输出之第三部分】全世界所有国家的行政区划整理,省市信息,已按照国家,省,市排好序,可直接复制使用,第三部分到12722行,总条数:21088
  8. PlatformIO中arduino框架下stm32编程实现原理
  9. 推荐几款网盘资源搜索站点,必须收藏 !
  10. 软件与证书之间的关系
  11. 技术方案评审文档模版
  12. slice与split的区别
  13. wow达拉然发礼物机器人_达拉然彩蛋:会把玩家变羊的NPC,并赠送礼物
  14. 进阶版--Mongodb命令汇总
  15. java.sql.SQLException: No suitable driver found for jdbc
  16. OPENGL-学习计算机图形学
  17. oracle ebs 安装教程,Oracle EBS R12.1.1 安装及配置
  18. 台式计算机激光头,cd机激光头维修论坛-CD机维修,我家台式CD机坏了,进仓后激光头只动动,但是不发红光,懂的朋友来指点。-电气资讯 - 电工屋...
  19. 二分法求解平方根注意点:
  20. Edge浏览器打开新建标签页速度很慢?如何解决?

热门文章

  1. FCPX插件-103个可爱卡通水果蔬菜食物图标动画 Healthy Food Icons
  2. 神华15亿投薄膜太阳能:奇葩买卖or布局未来?
  3. Python非全日制培训
  4. c语言复习--寄存器变量(register)
  5. xp停止服务之后该如何让系统免疫Autorun病毒
  6. 关于苹果设备唯一标示uuid
  7. 解决:502 bad gateway
  8. 【算法导论学习-012】n个数随机等概率的抽样m个
  9. nginx 报错502 bad Gateway
  10. 嵖岈山半程(21km)山地马拉松