码迷,mamicode.com
首页 > Web开发 > 详细

第十五讲.数据解析(XML与JSON两种数据解析)

时间:2015-09-29 23:29:15      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:

一.XML数据解析

  1.SAX:Simple API for XML。基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)

 

技术分享
 
 
 
 
NSXMLParser的解析方法:

 

  1 #import "ViewController.h"
  2 #import "Model.h"
  3 
  4 @interface ViewController ()<NSXMLParserDelegate>
  5 
  6 @property(nonatomic,strong)UITableView *tableView;
  7 
  8 @property(nonatomic,copy)NSString *string;
  9 
 10 @property(nonatomic,strong)NSMutableArray *dataArray;
 11 
 12 @end
 13 
 14 @implementation ViewController
 15 
 16 - (void)viewDidLoad {
 17     [super viewDidLoad];
 18     // Do any additional setup after loading the view.
 19 
 20     
 21     
 22 }
 23 
 24 
 25 //NSXMLParser类的数据解析***************************************
 26 //以数字开头是,分两段解析
 27 - (IBAction)SAXSlution:(UIButton *)sender {
 28     
 29     //XML数据解析  第一步  获取相应的文件  转化为NSString类型
 30     //如果需要取得的文件在左边栏里,需要使用NSBundle类,获取路径
 31     //第一个参数代表文件的名字,可以连着类型
 32     //第二个参数代表文件类型 如果第一个有参数 第二个为空
 33     //@"date.txt" 名字要注意
 34     NSString *patarStr = [[NSBundle mainBundle] pathForResource:@"date.txt" ofType:nil];
 35     
 36     //第二步将转化成的字符串类型   转化为data类型
 37     
 38     //通过patarStr这个路径拿到文件,  转化成data
 39     //NSDate 代表的是时间,    NSData    代表的是数据
 40     NSData *data = [NSData dataWithContentsOfFile:patarStr];
 41     
 42     //第三步  转化为data类型那个的数据,使用NSXMLParser方法进行解析
 43     
 44     //系统提供的  XML解析类
 45     NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
 46     
 47     //指定代理
 48     parser.delegate = self;
 49     
 50     //开始解析文档
 51     [parser parse];
 52     
 53 }
 54 
 55 #pragma -mark   NSXMLParserDelegate
 56 
 57 //开始解析文档
 58 -(void)parserDidStartDocument:(NSXMLParser *)parser
 59 {
 60     //在这里初始化数组
 61     //因为只走一次,代表真正的解析的开始,所以数据源初始化放在这里进行
 62   self.dataArray  = [NSMutableArray array];
 63     
 64     NSLog(@"开始解析文档");
 65 }
 66 
 67 
 68 //开始解析标签  结束标签不打印(注意)   这里并没有打印出真正的内容,是开始解析的标志
 69 //第一个的参数代表的是标签的名字
 70 //第二个参数代表的是结点前面的修饰
 71 //第三个参数暂时不用
 72 //第四个参数代表的是标签的属性
 73 
 74 -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
 75 {
 76     NSLog(@"%@",elementName);
 77     //在检测时           初始化一个model,
 78     if ([elementName isEqualToString:@"message"]) {
 79         Model *model = [[Model alloc] init];
 80         [self.dataArray addObject:model];
 81     }
 82 }
 83 
 84 //将解析的数据用字符串输出
 85 -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
 86 {
 87     NSLog(@"%@",string);
 88 //    Model *model = self.dataArray.lastObject;
 89     
 90     //这里拿不到标签,  只做保存数据的事情
 91 //    _string = string;
 92     
 93     //XML在解析时,数字在前时会解析成两段,可以用拼接的方法将他们连接在一起
 94     //拼接字符串,可以将分开的时间,也拼接在一起
 95     _string = [NSString stringWithFormat:@"%@ %@",_string,string];
 96     
 97 }
 98 
 99 //此为结束 解析 标签  (解析结束后就可以获得真正的值)
100 -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
101 {
102     NSLog(@"%@",elementName);
103     
104     
105     //这里拿到的标签  代表的是结束标签  同时代表数据已经解析完毕
106     //新添加的数组一定在数组最后的位置,所以这里用lastObject可以取到刚去到的那一个
107     Model *model = self.dataArray.lastObject;
108     
109 
110     [model  setValue:self.string forKey:elementName];
111     
112 }
113 
114 //结束解析
115 -(void)parserDidEndDocument:(NSXMLParser *)parser
116 {
117     NSLog(@"结束解析");
118     //快速遍历
119     for (Model * m in  self.dataArray) {
120         NSLog(@"%@ %@ %@ %@ ",m.reciver,m.sender,m.date,m.content);
121     }
122 
123 }
124 
125 //解析发生错误时会走
126 -(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
127 {
128     NSLog(@"解析发生错误时会走");
129 
130 }

 

 
2.DOM解析
 
 
 
 
 1 //使用DOM 解析
 2 - (IBAction)buttonClick:(UIButton *)sender {
 3     
 4     
 5     NSString *pathStr = [[NSBundle  mainBundle] pathForResource:@"date.txt" ofType:nil];
 6     
 7     NSData *data = [NSData dataWithContentsOfFile:pathStr];
 8     
 9     //DOM解析**********************************
10     
11     //初始化一个GData的实例   获取所有文件
12     GDataXMLDocument  *XMLDocument = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
13     //获取根节点
14     GDataXMLElement *rootElement = XMLDocument.rootElement;
15     
16     //初始化数组
17     self.dataArray = [NSMutableArray array];
18     //GDataXMLElement  查找结点的类
19     for (GDataXMLElement *son in rootElement.children) {
20         
21         Model *model = [[Model alloc] init];
22         [self.dataArray addObject:model];
23         for (GDataXMLElement *child in son.children) {
24             //stringValue 代表结点里面的数据
25             //name代表结点的名字
26             [model setValue:child.stringValue forKey:child.name];
27         }
28     }
29     //遍历打印
30     for (Model * m in  self.dataArray) {
31         NSLog(@"%@ %@ %@ %@ ",m.reciver,m.sender,m.date,m.content);
32     }
33     
34 }

 

 
 
 
 
 
 
 
 
 
二.JSON解析
 
 
  1.JSON数据解析
 
 1 //JSON数据解析***************************************
 2 - (IBAction)JsonButtonclick:(UIButton *)sender {
 3     
 4     NSString *pathFile = [[NSBundle mainBundle] pathForResource:@"date2.txt" ofType:nil];
 5     //接收文件数据
 6     NSData * data = [NSData dataWithContentsOfFile:pathFile];
 7     
 8     //使用JSON解析数据
 9     
10     // NSJSONReadingMutableContainers 代表返回一个可变数组或者字典
11     // NSJSONReadingMutableLeaves 代表返回一个字符串
12     // NSJSONReadingAllowFragments 可以用任意类型接收
13     NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
14     
15     NSLog(@"%@",array);
16     
17     self.dataArray = [NSMutableArray array];
18 //    NSLog(@"%@",array);
19     for (NSDictionary *dic in array) {
20         
21         Model *model = [[Model alloc] init];
22         
23         [model setValuesForKeysWithDictionary:dic];
24         //把model添加进数组
25         [self.dataArray addObject:model];
26         
27     }
28     
29     //快速遍历
30     for (Model * m in  self.dataArray) {
31         
32         NSLog(@"%@ %@ %@ %@ ",m.reciver,m.sender,m.date,m.content);
33     }
34 
35 }

 

 
 
 
 
 
 
 
2.JSONKit 解析
 
 
 1 //JSONKit 解析**********************************
 2 
 3 - (IBAction)JSONKit:(UIButton *)sender {
 4     
 5     NSString *pathFile = [[NSBundle mainBundle] pathForResource:@"date2.txt" ofType:nil];
 6     //接收文件数据
 7     NSData * data = [NSData dataWithContentsOfFile:pathFile];
 8     
 9     NSArray *arr = [data objectFromJSONData];
10     
11     NSLog(@"%@",arr);
12     
13 
14 
15     self.dataArray = [NSMutableArray array];
16     //    NSLog(@"%@",array);
17     for (NSDictionary *dic in arr) {
18         
19         Model *model = [[Model alloc] init];
20         
21         [model setValuesForKeysWithDictionary:dic];
22         //把model添加进数组
23         [self.dataArray addObject:model];
24         
25     }
26     //快速遍历
27     for (Model * m in  self.dataArray) {
28         
29         NSLog(@"%@ %@ %@ %@ ",m.reciver,m.sender,m.date,m.content);
30     }
31     
32     
33 }

 

 
 
 
 
3.
 
 
 
 
 


第十五讲.数据解析(XML与JSON两种数据解析)

标签:

原文地址:http://www.cnblogs.com/erdeng/p/4847451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!