iOS开发——网络编程OC篇&(九)数据解析

数据解析

关于iOS开发的中数据解析的方法有两种JSON和XML,这里只做简单的介绍,会使用就可以了。

JSON——

关于JSON的解析经过很多爱好者的分析使用相同自带的还是最好的,不管是从使用的容易度还是性能方面

NSJSONSerialization

 1 -(void)start
 2 {
 3
 4     NSString* path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"json"];
 5
 6     NSData *jsonData = [[NSData alloc] initWithContentsOfFile:path];
 7
 8     NXJsonParser* jsonParser = [[NXJsonParser alloc] initWithData:jsonData];
 9     id jsonObj = [jsonParser parse:nil ignoreNulls:NO];
10
11     if (!jsonObj) {
12         NSLog(@"JSON数据解析失败。");
13         return;
14     }
15
16     _notes = [jsonObj objectForKey:@"Record"];
17
18     [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadViewNotification" object:self.notes userInfo:nil];
19     self.notes = nil;
20
21 }

XML——

SAX:小数据的XML数据推荐使用NSXMLPaser

DOM(第三方库):大数据的XML数据使用最多的是TBXML和GDataXML,这两种方式使用思路差不多,TBXML更快但是具体使用哪一种看个人爱好和公司的需求

SAX——NSXMLParser

上图是XML的部分数据,就是我需要解析的XML文件对应的数据

NSXMLParser解析源码

 1 -(void)start
 2 {
 3     NSString* path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"xml"];
 4
 5     NSURL *url = [NSURL fileURLWithPath:path];
 6     //开始解析XML
 7     NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
 8     parser.delegate = self;
 9     [parser parse];
10     NSLog(@"解析完成...");
11 }
12
13 //文档开始的时候触发
14 - (void)parserDidStartDocument:(NSXMLParser *)parser
15 {
16     _notes = [NSMutableArray new];
17 }
18
19 //文档出错的时候触发
20 - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
21 {
22     NSLog(@"%@",parseError);
23 }
24
25 //遇到一个开始标签时候触发
26 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
27   namespaceURI:(NSString *)namespaceURI
28  qualifiedName:(NSString *)qualifiedName
29     attributes:(NSDictionary *)attributeDict
30 {
31     _currentTagName = elementName;
32     if ([_currentTagName isEqualToString:@"Note"]) {
33         NSString *_id = [attributeDict objectForKey:@"id"];
34         NSMutableDictionary *dict = [NSMutableDictionary new];
35         [dict setObject:_id forKey:@"id"];
36         [_notes addObject:dict];
37     }
38
39 }
40
41 //遇到字符串时候触发
42 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
43 {
44     //替换回车符和空格
45     string =[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
46     if ([string isEqualToString:@""]) {
47         return;
48     }
49     NSMutableDictionary *dict = [_notes lastObject];
50
51     if ([_currentTagName isEqualToString:@"CDate"] && dict) {
52         [dict setObject:string forKey:@"CDate"];
53     }
54
55     if ([_currentTagName isEqualToString:@"Content"] && dict) {
56         [dict setObject:string forKey:@"Content"];
57     }
58
59     if ([_currentTagName isEqualToString:@"UserID"] && dict) {
60         [dict setObject:string forKey:@"UserID"];
61     }
62 }
63
64 //遇到结束标签时候出发
65 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
66   namespaceURI:(NSString *)namespaceURI
67  qualifiedName:(NSString *)qName;
68 {
69     self.currentTagName = nil;
70 }
71
72
73 //遇到文档结束时候触发
74 - (void)parserDidEndDocument:(NSXMLParser *)parser
75 {
76     [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadViewNotification" object:self.notes userInfo:nil];
77     self.notes = nil;
78 }

读取数据的方式有:

initWithContentsOfUR:使用url获取文件数据(解析对象)

initWithData:使用NSData创建解析对象

initWithStream:使用IO流创建解析对象

 

DOM——TBXML

 1 //开始解析
 2 -(void)start
 3 {
 4     _notes = [NSMutableArray new];
 5
 6     TBXML* tbxml = [[TBXML alloc] initWithXMLFile:@"Notes.xml" error:nil];
 7
 8     TBXMLElement * root = tbxml.rootXMLElement;
 9
10     // if root element is valid
11     if (root) {
12
13         TBXMLElement * noteElement = [TBXML childElementNamed:@"Note" parentElement:root];
14
15         while ( noteElement != nil) {
16
17             NSMutableDictionary *dict = [NSMutableDictionary new];
18
19             TBXMLElement *CDateElement = [TBXML childElementNamed:@"CDate" parentElement:noteElement];
20             if ( CDateElement != nil) {
21                 NSString *CDate = [TBXML textForElement:CDateElement];
22                 [dict setValue:CDate forKey:@"CDate"];
23             }
24
25             TBXMLElement *ContentElement = [TBXML childElementNamed:@"Content" parentElement:noteElement];
26             if ( ContentElement != nil) {
27                 NSString *Content = [TBXML textForElement:ContentElement];
28                 [dict setValue:Content forKey:@"Content"];
29             }
30
31             TBXMLElement *UserIDElement = [TBXML childElementNamed:@"UserID" parentElement:noteElement];
32             if ( UserIDElement != nil) {
33                 NSString *UserID = [TBXML textForElement:UserIDElement];
34                 [dict setValue:UserID forKey:@"UserID"];
35             }
36
37             //获得ID属性
38             NSString *_id = [TBXML valueOfAttributeNamed:@"id" forElement:noteElement error:nil];
39             [dict setValue:_id forKey:@"id"];
40
41             [_notes addObject:dict];
42
43
44             noteElement = [TBXML nextSiblingNamed:@"Note" searchFromElement:noteElement];
45
46         }
47     }
48
49     NSLog(@"解析完成...");
50
51     [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadViewNotification" object:self.notes userInfo:nil];
52     self.notes = nil;
53
54 }

initWithXMLFile:error:文件中

initWithXMLString:error:返回的字符串中

initWithData:error:NSData中

DOM——GDataXML

 1 /**
 2  * GDataXML解析:DOM----一口气加载所有,适合xml小文件
 3  */
 4 -(void)gDataXML:(NSData *)data
 5 {
 6     // 加载整个XML数据
 7     GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
 8
 9     // 获得文档的根元素 -- videos元素
10     GDataXMLElement *root = doc.rootElement;
11
12     // 获得根元素里面的所有video元素
13     NSArray *elements = [root elementsForName:@"video"];
14
15     // 遍历所有的video元素
16     for (GDataXMLElement *videoElement in elements) {
17         iCocosVideo *video = [[iCocosVideo alloc] init];
18
19         // 取出元素的属性
20         video.id = [videoElement attributeForName:@"id"].stringValue.intValue;
21         video.length = [videoElement attributeForName:@"length"].stringValue.intValue;
22         video.name = [videoElement attributeForName:@"name"].stringValue;
23         video.image = [videoElement attributeForName:@"image"].stringValue;
24         video.url = [videoElement attributeForName:@"url"].stringValue;
25
26         // 添加到数组中
27         [self.videos addObject:video];
28     }
29
30
31 }

时间: 2024-10-10 20:38:00

iOS开发——网络编程OC篇&(九)数据解析的相关文章

iOS开发——网络编程OC篇&(三)数据请求

一.GET请求和POST请求简单说明 创建GET请求 1 // 1.设置请求路径 2 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 3 NSURL *url=[NSURL URLWithString:urlStr]; 4 5 // 2.创建请求对

iOS开发——网络编程OC篇&数据解析总结

数据解析总结 1 //***************************************************XML 2 3 /** 4 NSXML 5 */ 6 /** 7 // 1. 开始解析XML文档 8 - (void)parserDidStartDocument: 9 10 // 2. 开始解析某个元素,会遍历整个XML,识别元素节点名称 11 - (void)parser:didStartElement:namespaceURI:qualifiedName:attrib

iOS开发——网络编程OC篇&(十二)AFN详解

AFN详解 众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各种序列化的操作,同时还要考虑请求数据的安全等一堆问题. 一.早前的几个网络框架 1.ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新. 2.MKNetworkKit (印度人写的). 3.AFN一直还在更新. AFNetworking的出现:MAC/iOS设计的一套网络

iOS开发——网络编程OC篇&数据请求总结

数据请求总结 1 //**************************************GET 2 //同步 3 /* 4 //第一步,创建URL 5 NSURL * url = [[NSURL alloc]initWithString:@"http://e.hiphotos.baidu.com/image/w%3D1366%3Bcrop%3D0%2C0%2C1366%2C768/sign=66f9b9980ef431adbcd2473a7d0097cc/08f790529822720

iOS开发——网络编程OC篇&总结

网络开发总结 一.一个HTTP请求的基本要素 1.请求URL:客户端通过哪个路径找到服务器 2.请求参数:客户端发送给服务器的数据 * 比如登录时需要发送的用户名和密码 3.返回结果:服务器返回给客户端的数据 * 一般是JSON数据或者XML数据 二.基本的HTTP请求的步骤(移动客户端)1.拼接"请求URL" + "?" + "请求参数" * 请求参数的格式:参数名=参数值 * 多个请求参数之间用&隔开:参数名1=参数值1&参数

iOS开发——网络编程OC篇&Socket编程

Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议   对应于应用层 tcp协议    对应于传输层 ip协议     对应于网络层 三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要

iOS开发——网络编程OC篇&(十)NSURLConnection/NSSeccession

一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... (3)NSMutableURLRequest:NSURLRequest的子类 (4)NSURLConnection:负责发送请求,建立客户端和服务器的连接.发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据 二.NSURLConnection的使用 1.简单说明 使用NSURL

iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备

XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容. 有许多的IM系统,如AOL IM.Yahoo IM. MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议. 协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已经出现过

iOS开发——网络编程OC篇&使用WebView构建HyBird应用

使用WebView构建HyBird应用 HyBird是一种本地技术与Web相结合,能过实现跨平台的移动应用开发,最常用的一个框架:PhoneGap 一:首先,写好html代码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, m