标签:
一.XML数据解析
1.SAX:Simple API for XML。基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)
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 }
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 }
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 }
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 }
标签:
原文地址:http://www.cnblogs.com/erdeng/p/4847451.html