UI第十五天:XML、JSON数据结构解析
2015-12-02 20:07
387 查看
⼀、解析的基本概念
所谓“解析”:从事先规定好的格式中提取数据
解析的前提:提前约定好格式、数据提供⽅按照格式提供数据、 数据获取⽅则按照格式获取数据
iOS开发常⻅的解析:XML解析、JSON解析
⼆、XML数据结构
XML:Extensible Markup language(可扩展标记语⾔),主流数 据格式之⼀,可以⽤来存储和传输数据。
数据交换
内容管理
⽤作配置⽂件
声明
节点使⽤⼀对标签表⽰。起始和结束标签。
根节点是起始节点,只有⼀个。节点可以嵌套。
节点可以有值。存储在⼀对⼉标签中。
三、JSON数据结构
Javascript Object Notation,轻量级的数据交换格式,采⽤完全 独⽴于语⾔的⽂本格式,被称为理想的数据交换语⾔
JSON⽂档有两种结构:对象、数据
对象:以“{”开始,以“}”结束,是“名称/值”对⼉的集合。名称和值中 间⽤“:”隔开。多个“名称/值”对之间⽤“ , ”隔开。类似OC中的字典。
数组:以“[”开始,以“]”结束,中间是数据。数据以“ , ”分隔。
JSON中的数据类型:字符串、数值、BOOL、对象、数组。
四、XML与JSON两种数据结构的优缺点
//解析xml数据(SAX解析)
-(void)xmlParserUpData
{
//利用系统的NSXMLParser
//xml分析
人
类
//以驱动事件循环进行xml的解析(利用触发的代理方法进行解析)
//真谛:逐行解析
//创建分析人
//获取xml文件路径
NSString *path = [[NSBundle
mainBundle]pathForResource:@"Student"
ofType:@"xml"];
NSXMLParser *parser = [[NSXMLParser
alloc]initWithData:[NSData
dataWithContentsOfFile:path]];
//驱动事件(设置代理)
parser.delegate =
self;
//开始分析
[parser parse];
//释放
[parser release];
}
#pragma mark -- 代理方法
-(void)parserDidStartDocument:(NSXMLParser
*)parser
{
//初始化数组保存model
self.arr = [NSMutableArray
array];
NSLog(@"已经开始分析文件");
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString
*)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString
*)qName attributes:(NSDictionary *)attributeDict
{
//遇到student节点初始化model
if ([elementName
isEqualToString:@"Student"]) {
self.model = [[Student
alloc]init];
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString
*)string
{
//保存字符串
self.str = string;
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString
*)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString
*)qName
{
if ([elementName
isEqualToString:@"Student"]) {
[self.arr
addObject:self.model];
[self.model
release];
}else
{
[self.model
setValue:self.str
forKey:elementName];
}
}
-(void)parserDidEndDocument:(NSXMLParser
*)parser
{
NSLog(@"已经结束文件分析");
}
// Dom解析
依靠第三方类库GDataXMLNode
// GDataXMLNode类
依靠系统的libxml2
来实现
//
使用的时候
需要导入libxml2
框架
设置Header Search paths /usr/include/libxml2
//
真谛:把所有的节点一次性读取
并转化为
树形结构
整体解析(与SAX解析对比)
//-(void)GDataXMLNodeUpData
//{
// NSString *path = [[NSBundle mainBundle]pathForResource:@"Student" ofType:@"xml"];
// //创建一个空的错误对象
// NSError *error = nil;
//
//
// //初始化文件对象
// GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:[NSData dataWithContentsOfFile:path] options:0 error:&error];
// //
获取根节点
//逐层剥去不能跳步
// GDataXMLElement *rootelement = doc.rootElement;
// //
获取根节点下 student
// NSArray *arr = [rootelement elementsForName:@"Student"];
// self.dataArray = [NSMutableArray array];
// //遍历数组
对每一个Student节点
继续化整为零
// for (GDataXMLElement *element in arr) {
// NSString *name =[self test:element elementname:@"name"];
// NSString *gender = [self test:element elementname:@"gender"];
// NSString *age = [self test:element elementname:@"sex"];
// NSString *motto = [self test:element elementname:@"motto"];
// Student *model = [[Student alloc]init];
//
model.name = name;
// model.gender =gender;
// model.age= age;
// model.motto =motto;
// [self.dataArray addObject:model];
// [model release];
// }
//}
// 1.找爆红的对象(是方法没有的
需要外界传进来)
// 2.找可变的对象(例如name
也是需要传递的)
//选好返回值
/
解析json数据
//
真谛:必须要指定json文件的最外层是什么
// []数组 {}字典
//JSONKIT
解析数据
NSString *path = [[NSBundle
mainBundle]pathForResource:@"area"
ofType:@"json"];
NSData *data = [NSData
dataWithContentsOfFile:path];
//jsonKit 解析
NSMutableArray *arr = [data
objectFromJSONData];
self.arr = [NSMutableArray array];
//json 解析
// NSMutableArray *dataArray = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:path] options:NSJSONReadingMutableContainers
error:nil];
for (NSDictionary *one
in arr) {
City *model = [[City
alloc]init];
[model setValuesForKeysWithDictionary:one];
[self.arr
addObject:model];
[model release];
}
五、进⾏XML数据结构解析时使⽤到的SAX⼯具,DOM⼯具
SAX:Simple API for XML。基于事件驱动的解析⽅式,逐⾏解析 数据。(采⽤协议回调机制)
NSXMLParser是iOS⾃带的XML解析类。采⽤SAX⽅式解析数据。
解析过程由NSXMLParserDelegate协议⽅法回调
解析过程:开始标签->取值->结束标签->取值
DOM:Document Object Model(⽂档对象模型)。解析时需要 将XML⽂件整体读⼊,并且将XML结构化成树状,使⽤时再通过树 状结构读取相关数据
GDataXMLNode是Google提供的开源XML解析类,对 libxml2.dylib进⾏了Objective-C的封装
采⽤DOM⽅式解析数据
iOS中包含⼀个C语⾔的动态链接库libxml2.dylib,解析速度⽐ NSXMLParser快
六、进⾏JSON数据结构解析时使⽤到的第三⽅框架
NSJSONSerialization对象的作⽤
JSONDecoder对象的作⽤
NSString(JSONKitDeserializing)类⺫的作⽤
NSData(JSONKitDeserializing)类⺫的作⽤
NSString(JSONKitSerializing)类⺫的作⽤
NSArray(JSONKitSerializing)类⺫的作⽤
NSDictionary(JSONKitSerializing)类⺫的作⽤
总结
数据解析:从某种格式的数据中提取⾃⼰所需要的数据。
主流的数据交换格式有两种:XML和JSON
XML解析分为两种:SAX解析和DOM解析 XML解析⼯具:NSXMLParser、GDataXMLNode、TochXML和KissXML等
JSON解析⼯具:JSONKit、NSJSONSerialization、TouchJSON和SBJSON 等,其中NSJSONSerialization是系统提供的解析类,其解析效率是最⾼的
所谓“解析”:从事先规定好的格式中提取数据
解析的前提:提前约定好格式、数据提供⽅按照格式提供数据、 数据获取⽅则按照格式获取数据
iOS开发常⻅的解析:XML解析、JSON解析
⼆、XML数据结构
XML:Extensible Markup language(可扩展标记语⾔),主流数 据格式之⼀,可以⽤来存储和传输数据。
数据交换
内容管理
⽤作配置⽂件
声明
节点使⽤⼀对标签表⽰。起始和结束标签。
根节点是起始节点,只有⼀个。节点可以嵌套。
节点可以有值。存储在⼀对⼉标签中。
三、JSON数据结构
Javascript Object Notation,轻量级的数据交换格式,采⽤完全 独⽴于语⾔的⽂本格式,被称为理想的数据交换语⾔
JSON⽂档有两种结构:对象、数据
对象:以“{”开始,以“}”结束,是“名称/值”对⼉的集合。名称和值中 间⽤“:”隔开。多个“名称/值”对之间⽤“ , ”隔开。类似OC中的字典。
数组:以“[”开始,以“]”结束,中间是数据。数据以“ , ”分隔。
JSON中的数据类型:字符串、数值、BOOL、对象、数组。
四、XML与JSON两种数据结构的优缺点
//解析xml数据(SAX解析)
-(void)xmlParserUpData
{
//利用系统的NSXMLParser
//xml分析
人
类
//以驱动事件循环进行xml的解析(利用触发的代理方法进行解析)
//真谛:逐行解析
//创建分析人
//获取xml文件路径
NSString *path = [[NSBundle
mainBundle]pathForResource:@"Student"
ofType:@"xml"];
NSXMLParser *parser = [[NSXMLParser
alloc]initWithData:[NSData
dataWithContentsOfFile:path]];
//驱动事件(设置代理)
parser.delegate =
self;
//开始分析
[parser parse];
//释放
[parser release];
}
#pragma mark -- 代理方法
-(void)parserDidStartDocument:(NSXMLParser
*)parser
{
//初始化数组保存model
self.arr = [NSMutableArray
array];
NSLog(@"已经开始分析文件");
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString
*)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString
*)qName attributes:(NSDictionary *)attributeDict
{
//遇到student节点初始化model
if ([elementName
isEqualToString:@"Student"]) {
self.model = [[Student
alloc]init];
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString
*)string
{
//保存字符串
self.str = string;
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString
*)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString
*)qName
{
if ([elementName
isEqualToString:@"Student"]) {
[self.arr
addObject:self.model];
[self.model
release];
}else
{
[self.model
setValue:self.str
forKey:elementName];
}
}
-(void)parserDidEndDocument:(NSXMLParser
*)parser
{
NSLog(@"已经结束文件分析");
}
// Dom解析
依靠第三方类库GDataXMLNode
// GDataXMLNode类
依靠系统的libxml2
来实现
//
使用的时候
需要导入libxml2
框架
设置Header Search paths /usr/include/libxml2
//
真谛:把所有的节点一次性读取
并转化为
树形结构
整体解析(与SAX解析对比)
//-(void)GDataXMLNodeUpData
//{
// NSString *path = [[NSBundle mainBundle]pathForResource:@"Student" ofType:@"xml"];
// //创建一个空的错误对象
// NSError *error = nil;
//
//
// //初始化文件对象
// GDataXMLDocument *doc = [[GDataXMLDocument alloc]initWithData:[NSData dataWithContentsOfFile:path] options:0 error:&error];
// //
获取根节点
//逐层剥去不能跳步
// GDataXMLElement *rootelement = doc.rootElement;
// //
获取根节点下 student
// NSArray *arr = [rootelement elementsForName:@"Student"];
// self.dataArray = [NSMutableArray array];
// //遍历数组
对每一个Student节点
继续化整为零
// for (GDataXMLElement *element in arr) {
// NSString *name =[self test:element elementname:@"name"];
// NSString *gender = [self test:element elementname:@"gender"];
// NSString *age = [self test:element elementname:@"sex"];
// NSString *motto = [self test:element elementname:@"motto"];
// Student *model = [[Student alloc]init];
//
model.name = name;
// model.gender =gender;
// model.age= age;
// model.motto =motto;
// [self.dataArray addObject:model];
// [model release];
// }
//}
// 1.找爆红的对象(是方法没有的
需要外界传进来)
// 2.找可变的对象(例如name
也是需要传递的)
//选好返回值
/
解析json数据
//
真谛:必须要指定json文件的最外层是什么
// []数组 {}字典
//JSONKIT
解析数据
NSString *path = [[NSBundle
mainBundle]pathForResource:@"area"
ofType:@"json"];
NSData *data = [NSData
dataWithContentsOfFile:path];
//jsonKit 解析
NSMutableArray *arr = [data
objectFromJSONData];
self.arr = [NSMutableArray array];
//json 解析
// NSMutableArray *dataArray = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:path] options:NSJSONReadingMutableContainers
error:nil];
for (NSDictionary *one
in arr) {
City *model = [[City
alloc]init];
[model setValuesForKeysWithDictionary:one];
[self.arr
addObject:model];
[model release];
}
五、进⾏XML数据结构解析时使⽤到的SAX⼯具,DOM⼯具
SAX:Simple API for XML。基于事件驱动的解析⽅式,逐⾏解析 数据。(采⽤协议回调机制)
NSXMLParser是iOS⾃带的XML解析类。采⽤SAX⽅式解析数据。
解析过程由NSXMLParserDelegate协议⽅法回调
解析过程:开始标签->取值->结束标签->取值
DOM:Document Object Model(⽂档对象模型)。解析时需要 将XML⽂件整体读⼊,并且将XML结构化成树状,使⽤时再通过树 状结构读取相关数据
GDataXMLNode是Google提供的开源XML解析类,对 libxml2.dylib进⾏了Objective-C的封装
采⽤DOM⽅式解析数据
iOS中包含⼀个C语⾔的动态链接库libxml2.dylib,解析速度⽐ NSXMLParser快
六、进⾏JSON数据结构解析时使⽤到的第三⽅框架
NSJSONSerialization对象的作⽤
JSONDecoder对象的作⽤
NSString(JSONKitDeserializing)类⺫的作⽤
NSData(JSONKitDeserializing)类⺫的作⽤
NSString(JSONKitSerializing)类⺫的作⽤
NSArray(JSONKitSerializing)类⺫的作⽤
NSDictionary(JSONKitSerializing)类⺫的作⽤
总结
数据解析:从某种格式的数据中提取⾃⼰所需要的数据。
主流的数据交换格式有两种:XML和JSON
XML解析分为两种:SAX解析和DOM解析 XML解析⼯具:NSXMLParser、GDataXMLNode、TochXML和KissXML等
JSON解析⼯具:JSONKit、NSJSONSerialization、TouchJSON和SBJSON 等,其中NSJSONSerialization是系统提供的解析类,其解析效率是最⾼的
相关文章推荐
- 数据结构--向量--起泡排序
- 数据结构——八种排序算法
- 数据结构——程序性能分析
- 数据结构与算法JavaScript (五) 串(经典KMP算法)
- 数据结构与算法JavaScript (四) 串(BF)
- 数据结构与算法JavaScript (三) 链表
- 数据结构与算法JavaScript (二) 队列
- 数据结构与算法JavaScript (一) 栈
- 数据结构笔记1顺序栈
- 数据结构笔记2链栈
- 数据结构笔记3双向栈
- 数据结构笔记5带头结点单链表
- 数据结构笔记4双向链表
- 数据结构笔记6链队列
- 黑马程序员——关于数据结构栈的实现方式的探讨
- 数据结构与算法-----冒泡排序
- 数据结构 字符串的长度
- 数据结构之 哈希表
- 数据结构之 哈希表
- 数据结构之 循环表线性表