OC学习--JSON解析和XML解析
2015-06-16 20:02
639 查看
一、XML解析、
什么是XML?
|~ 扩展标记语言 (Extensible Markup Language, XML)
|~ 是一种标记语言,很类似HTML
|~XML设计的宗旨是传输数据和存储数据,而非显示数据
|~XML标签没有被预定义,需要自定义标签
|~具有自我描述性
|~格式统一,跨平台和语言
====================XML解析========================
1、使用系统类NSXMLParser比较繁琐,现在基本上已经不再使用
2、通常使用第三方类库GData库
第三方类库使用的步骤:
(1)导入GData库
底层使用系统的libxml2库, 使用的时候添加libxml2
(2)添加libxml二进制库
Build Phases ---> Link Binary
添加 libxml2.dylib
(3)设置头文件搜索路径
Build Setting--->header search Path
添加 /usr/include/libxml2
(4)如果是arc的工程
Build Phases ---> Compile Source File
GDataXmlNode.m(非arc的)
填写编译选项:-fno-objc-arc
GData 第三方库 有两种方式解析
1、获取根节点所有元素,遍历所有的子节点
eg.①、解析本地XML文件
//1读取文件内容
NSData *data=[NSData
dataWithContentsOfFile:PATH];
//2.根据二进制数据创建文档树
GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
//3、获取根节点
GDataXMLElement *root= [doc
rootElement];
//4.获取根节点所有直接子节点
NSArray *ary= [root
children];//只有一个元素
GDataXMLElement *books=ary[0];
//5.获取所有books的子节点(也就是book的一些信息)
NSArray *bookAry= [books
children];
//定义一个数组用来存放解析出来的对象
NSMutableArray *mArry=[[NSMutableArray
alloc]init];
//6.遍历数组,解析出每一本书
for(GDataXMLElement *ele
in bookAry)
{
Book *bk=[[Book
alloc]init];
NSArray *attrArr =[ele
attributes];
NSArray *gBook=[ele
children];
bk.id=[attrArr[0]
stringValue];
bk.language=[attrArr[1]
stringValue];
bk.name=[gBook[0]
stringValue];
bk.author=[[gBook[1]
elementsForName:@"name"][0]
stringValue] ;
//bk.author=[gBook[1] stringValue];
bk.price=[gBook[2]
stringValue];
bk.summary=[gBook[3]
stringValue];
[mArry
addObject:bk];
}
②、解析网络数据
//1.将网络地址字符串转化成NSURL对象
NSURL *url=[NSURL
URLWithString:Path];
//2.将访问地址获取二进制数据
NSData *data=[[NSData
alloc]initWithContentsOfURL:url];
//3.以二进制数据创建文档树
GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
其他同上(是一样的)
2、使用xpath语法
==================XPATH介绍============================
|~ XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言
|~ XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
|~ XPath 使用路径表达式来选取 XML文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件
系统中看到的表达式非常相似。路径表达式是
从一个XML节点到另一个节点、或一组节点的书面步骤顺序。
===语法================================
eg、①、解析本地数据
//1读取文件内容
NSData *data=[NSData
dataWithContentsOfFile:file];
//2.根据二进制数据创建文档树
GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
//3.获取文档树中的所有cd
NSArray *cdArry=[doc
nodesForXPath:@"//CD"
error:nil];
//4.遍历数组保存所有信息
NSMutableArray *mArry=[[NSMutableArray
alloc]init];
for (GDataXMLElement *ele
in cdArry) {
YBCd *cd=[[YBCd
alloc]init];
NSArray *Ary= [ele
children];
cd.title= [Ary[0]
stringValue];
cd.artist=[Ary[1]
stringValue];
cd.country=[Ary[2]
stringValue];
cd.company=[Ary[3]
stringValue];
cd.price=[[Ary[4]
stringValue] floatValue];
cd.years=[[Ary[5]
stringValue] intValue];
[mArry
addObject:cd];
}
②、解析网络数据
//1、将路径转化成NSURL对象
NSURL *url=[NSURL
URLWithString:file];
//2.从网络请求数据
NSData *data=[NSData
dataWithContentsOfURL:url];
//3\创建文档树
GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
//4.获取文档树中的所有cd
NSArray *cdArry=[doc
nodesForXPath:@"//CD"
error:nil];
//5.遍历数组保存所有信息
NSMutableArray *mArry=[[NSMutableArray
alloc]init];
for (GDataXMLElement *ele
in cdArry) {
YBCd *cd=[[YBCd
alloc]init];
NSArray *Ary= [ele
children];
cd.title= [Ary[0]
stringValue];
cd.artist=[Ary[1]
stringValue];
cd.country=[Ary[2]
stringValue];
cd.company=[Ary[3]
stringValue];
cd.price=[[Ary[4]
stringValue] floatValue];
cd.years=[[Ary[5]
stringValue] intValue];
[mArry
addObject:cd];
}
二、JSON数据解析
===============什么是JSON?====
是JaveScript Object Notation的缩写,是一种轻量级的数据交换格式,支持多种语言,包括C, C#, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析和生成。独立于平台,独立于语言。
======================语法========================
J SON文件中的数据是以名称/值对的形式存储的,多个数据用逗号隔开;
花括号保存对象,中括号保存数组。
{
"root": {
"books": {
"book": [
{
"-id": "1",
"-language": "ch",
"name": "乔布斯传",
"author": { "name": "沃尔特·艾萨克森" },
"price": "80.00",
"summary": "一本介绍乔布斯传奇一生的图书。"
},
{
"-id": "2",
"-language": "ch",
"name": "呐喊",
"author": { "name": "鲁迅" },
"price": "12.00",
"summary": "揭示了中国的社会面貌,控诉了封建制度的罪恶,喊出了“五四”时期革命者的心声。它反映了“五四”彻底不妥协地反封建主义的革命精神,适应了中国革命从旧民主主义向新民主主义转变的需要,在中国现代文化史和文学史上占有重要地位!"
},
{
"-id": "3",
"-language": "en",
"name": "哈利波特",
"author": { "name": "JK罗琳" },
"price": "365.00",
"summary": "主人公哈利·波特在霍格沃茨魔法学校六年的学习生活和冒险故事。"
}
]
}
}
}
================JSON数据解析===================================
1、本地文件解析
//解析本地
//1.从文件中读取数据
NSData *dataBooke=[NSData dataWithContentsOfFile:PATH];
///2.将二进制数据转换为OC对象
id obj=[NSJSONSerialization
JSONObjectWithData:data2 options:NSJSONReadingMutableContainers
error:nil];
id root=[obj objectForKey:@"root"];
id books=[root objectForKey:@"books"];
id bookArry=[books
objectForKey:@"book"];
//3.遍历解析每一本书
NSMutableArray *marr=[[NSMutableArray
alloc]init];
for (id obj
in bookArry) {
Book *bk=[[Book
alloc]initWithId:[obj
objectForKey:@"-id"]
language:[obj
objectForKey:@"-language"]
name:[obj
objectForKey:@"name"]
author:[[obj
objectForKey:@"author" ]
objectForKey:@"name"]
price:[obj
objectForKey:@"price"]
summary:[obj
objectForKey:@"summary"]];
[marr
addObject:bk];
}
2、网络文件解析
//解析网络数据
//1.通过字符串初始化网址
NSURL *url=[NSURL
URLWithString:PATH2];
//2.通过网络内容获取数据
NSData *data2=[NSData
dataWithContentsOfURL:url];
3、将二进制数据转化为OC对象
//4.遍历解析每一本书
什么是XML?
|~ 扩展标记语言 (Extensible Markup Language, XML)
|~ 是一种标记语言,很类似HTML
|~XML设计的宗旨是传输数据和存储数据,而非显示数据
|~XML标签没有被预定义,需要自定义标签
|~具有自我描述性
|~格式统一,跨平台和语言
====================XML解析========================
1、使用系统类NSXMLParser比较繁琐,现在基本上已经不再使用
2、通常使用第三方类库GData库
第三方类库使用的步骤:
(1)导入GData库
底层使用系统的libxml2库, 使用的时候添加libxml2
(2)添加libxml二进制库
Build Phases ---> Link Binary
添加 libxml2.dylib
(3)设置头文件搜索路径
Build Setting--->header search Path
添加 /usr/include/libxml2
(4)如果是arc的工程
Build Phases ---> Compile Source File
GDataXmlNode.m(非arc的)
填写编译选项:-fno-objc-arc
GData 第三方库 有两种方式解析
1、获取根节点所有元素,遍历所有的子节点
eg.①、解析本地XML文件
//1读取文件内容
NSData *data=[NSData
dataWithContentsOfFile:PATH];
//2.根据二进制数据创建文档树
GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
//3、获取根节点
GDataXMLElement *root= [doc
rootElement];
//4.获取根节点所有直接子节点
NSArray *ary= [root
children];//只有一个元素
GDataXMLElement *books=ary[0];
//5.获取所有books的子节点(也就是book的一些信息)
NSArray *bookAry= [books
children];
//定义一个数组用来存放解析出来的对象
NSMutableArray *mArry=[[NSMutableArray
alloc]init];
//6.遍历数组,解析出每一本书
for(GDataXMLElement *ele
in bookAry)
{
Book *bk=[[Book
alloc]init];
NSArray *attrArr =[ele
attributes];
NSArray *gBook=[ele
children];
bk.id=[attrArr[0]
stringValue];
bk.language=[attrArr[1]
stringValue];
bk.name=[gBook[0]
stringValue];
bk.author=[[gBook[1]
elementsForName:@"name"][0]
stringValue] ;
//bk.author=[gBook[1] stringValue];
bk.price=[gBook[2]
stringValue];
bk.summary=[gBook[3]
stringValue];
[mArry
addObject:bk];
}
②、解析网络数据
//1.将网络地址字符串转化成NSURL对象
NSURL *url=[NSURL
URLWithString:Path];
//2.将访问地址获取二进制数据
NSData *data=[[NSData
alloc]initWithContentsOfURL:url];
//3.以二进制数据创建文档树
GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
其他同上(是一样的)
2、使用xpath语法
==================XPATH介绍============================
|~ XPath即为XML路径语言,它是一种用来确定XML文档中某部分位置的语言
|~ XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。
|~ XPath 使用路径表达式来选取 XML文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件
系统中看到的表达式非常相似。路径表达式是
从一个XML节点到另一个节点、或一组节点的书面步骤顺序。
===语法================================
eg、①、解析本地数据
//1读取文件内容
NSData *data=[NSData
dataWithContentsOfFile:file];
//2.根据二进制数据创建文档树
GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
//3.获取文档树中的所有cd
NSArray *cdArry=[doc
nodesForXPath:@"//CD"
error:nil];
//4.遍历数组保存所有信息
NSMutableArray *mArry=[[NSMutableArray
alloc]init];
for (GDataXMLElement *ele
in cdArry) {
YBCd *cd=[[YBCd
alloc]init];
NSArray *Ary= [ele
children];
cd.title= [Ary[0]
stringValue];
cd.artist=[Ary[1]
stringValue];
cd.country=[Ary[2]
stringValue];
cd.company=[Ary[3]
stringValue];
cd.price=[[Ary[4]
stringValue] floatValue];
cd.years=[[Ary[5]
stringValue] intValue];
[mArry
addObject:cd];
}
②、解析网络数据
//1、将路径转化成NSURL对象
NSURL *url=[NSURL
URLWithString:file];
//2.从网络请求数据
NSData *data=[NSData
dataWithContentsOfURL:url];
//3\创建文档树
GDataXMLDocument *doc=[[GDataXMLDocument
alloc]initWithData:data
options:0
error:nil];
//4.获取文档树中的所有cd
NSArray *cdArry=[doc
nodesForXPath:@"//CD"
error:nil];
//5.遍历数组保存所有信息
NSMutableArray *mArry=[[NSMutableArray
alloc]init];
for (GDataXMLElement *ele
in cdArry) {
YBCd *cd=[[YBCd
alloc]init];
NSArray *Ary= [ele
children];
cd.title= [Ary[0]
stringValue];
cd.artist=[Ary[1]
stringValue];
cd.country=[Ary[2]
stringValue];
cd.company=[Ary[3]
stringValue];
cd.price=[[Ary[4]
stringValue] floatValue];
cd.years=[[Ary[5]
stringValue] intValue];
[mArry
addObject:cd];
}
二、JSON数据解析
===============什么是JSON?====
是JaveScript Object Notation的缩写,是一种轻量级的数据交换格式,支持多种语言,包括C, C#, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析和生成。独立于平台,独立于语言。
======================语法========================
J SON文件中的数据是以名称/值对的形式存储的,多个数据用逗号隔开;
花括号保存对象,中括号保存数组。
{
"root": {
"books": {
"book": [
{
"-id": "1",
"-language": "ch",
"name": "乔布斯传",
"author": { "name": "沃尔特·艾萨克森" },
"price": "80.00",
"summary": "一本介绍乔布斯传奇一生的图书。"
},
{
"-id": "2",
"-language": "ch",
"name": "呐喊",
"author": { "name": "鲁迅" },
"price": "12.00",
"summary": "揭示了中国的社会面貌,控诉了封建制度的罪恶,喊出了“五四”时期革命者的心声。它反映了“五四”彻底不妥协地反封建主义的革命精神,适应了中国革命从旧民主主义向新民主主义转变的需要,在中国现代文化史和文学史上占有重要地位!"
},
{
"-id": "3",
"-language": "en",
"name": "哈利波特",
"author": { "name": "JK罗琳" },
"price": "365.00",
"summary": "主人公哈利·波特在霍格沃茨魔法学校六年的学习生活和冒险故事。"
}
]
}
}
}
================JSON数据解析===================================
1、本地文件解析
//解析本地
//1.从文件中读取数据
NSData *dataBooke=[NSData dataWithContentsOfFile:PATH];
///2.将二进制数据转换为OC对象
id obj=[NSJSONSerialization
JSONObjectWithData:data2 options:NSJSONReadingMutableContainers
error:nil];
id root=[obj objectForKey:@"root"];
id books=[root objectForKey:@"books"];
id bookArry=[books
objectForKey:@"book"];
//3.遍历解析每一本书
NSMutableArray *marr=[[NSMutableArray
alloc]init];
for (id obj
in bookArry) {
Book *bk=[[Book
alloc]initWithId:[obj
objectForKey:@"-id"]
language:[obj
objectForKey:@"-language"]
name:[obj
objectForKey:@"name"]
author:[[obj
objectForKey:@"author" ]
objectForKey:@"name"]
price:[obj
objectForKey:@"price"]
summary:[obj
objectForKey:@"summary"]];
[marr
addObject:bk];
}
2、网络文件解析
//解析网络数据
//1.通过字符串初始化网址
NSURL *url=[NSURL
URLWithString:PATH2];
//2.通过网络内容获取数据
NSData *data2=[NSData
dataWithContentsOfURL:url];
3、将二进制数据转化为OC对象
//4.遍历解析每一本书
相关文章推荐
- JSTL的c:forEach标签(${status.index})
- js--小结②
- JsonUtil
- 项目中js报错(取消js验证)
- Jetty9报JSP support not configured错误
- js 图片的上传前预览上传的图片(兼容所有浏览器)
- Seajs提供简单、极致的模块化开发体验
- 真正的iframe 自适应高度,动态高度 js
- javascript小技巧
- JSON
- js--小结①
- JavaScript 的 parseInt 取整
- jsp防盗链代码
- js输出数组中不同项的个数
- 一道题目理解js中变量在作用域链与原型链中的查找顺序
- JavaScript Prototype
- js可以解码utf-8编码,我一直以为decodeURIComponent只能解码16进制呢,原理???
- Java抓取网页数据(原来的页面+Javascript返回数据)
- POJ 1847 dijstra算法
- JavaScript——数组常用数组方法汇总