首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
Web开发
> 详细
XML、JSON数据解析
时间:
2015-05-13 14:56:19
阅读:
123
评论:
0
收藏:
0
[点我收藏+]
标签:
json
xml
解析:
XML解析
XML:可扩展性标记语言 主流数据格式之一
功能:数据交换 、web服务 、内容管理 、 用作配置文件(重点)
SAX 解析-->逐行解析(采用协议回调机制)
实现协议
NSXMLParserDelegate
- (
void
)startParse
{
//xml
解析:逐行解析
//
从文件列表中读取数据
//1.
获得文件路径
NSString
*sourcePath = [[
NSBundle
mainBundle
]
pathForResource
:
@"Student"
ofType
:
@".xml"
];
//2.
通过路径把文件转换成
NSData
类型
NSData
*data = [
NSData
dataWithContentsOfFile
:sourcePath];
//
创建的时候需要给
parser
一个字符串数据
(NSData)
NSXMLParser
*parser = [[
NSXMLParser
alloc
]
initWithData
:data];
//
设定代理人
parser.
delegate
=
self
;
//
开始对文件进行解析
[parser
parse
];
}
- (
void
)parser:(
NSXMLParser
*)parser didStartElement:(
NSString
*)elementName namespaceURI:(
NSString
*)namespaceURI qualifiedName:(
NSString
*)qName attributes:(
NSDictionary
*)attributeDict
{
//
当找到节点的时候,系统调用这个方法
NSLog
(
@"
节点头
"
);
if
([elementName
isEqualToString
:
@"students"
]) {
//
当找到
students
节点的时候,初始化数组
self
.
arr
= [
NSMutableArray
array
];
}
else
if
([elementName
isEqualToString
:
@"student"
]) {
//
当找到
student
节点的时候,创建一个
student
对象
添加到数组里
Student
*stu = [[
Student
alloc
]
init
];
[
self
.
arr
addObject
:stu];
[stu
release
];
}
}
- (
void
)parser:(
NSXMLParser
*)parser foundCharacters:(
NSString
*)string
{
//
当节点找到内容的时候,调用
NSLog
(
@"
节点内容
"
);
//
把内容保存起来
self
.
tempStr
= string;
}
- (
void
)parser:(
NSXMLParser
*)parser didEndElement:(
NSString
*)elementName namespaceURI:(
NSString
*)namespaceURI qualifiedName:(
NSString
*)qName
{
//
当找到节点结尾的时候调用
NSLog
(
@"
节点尾
"
);
Student
*stu = [
self
.
arr
lastObject
];
if
([elementName
isEqualToString
:
@"number"
]) {
stu.
number
=
self
.
tempStr
;
}
else
if
([elementName
isEqualToString
:
@"name"
]){
stu.
name
=
self
.
tempStr
;
}
else
if
([elementName
isEqualToString
:
@"sex"
]){
stu.
sex
=
self
.
tempStr
;
}
else
if
([elementName
isEqualToString
:
@"phone"
]){
stu.
phone
=
self
.
tempStr
;
}
}
DOM解析-->节点解析
- (
void
)startDOMParse
{
//
按节点解析
//1.
获取解析的文件信息
NSString
*xmlPath = [[
NSBundle
mainBundle
]
pathForResource
:
@"Student"
ofType
:
@".xml"
];
NSData
*data = [
NSData
dataWithContentsOfFile
:xmlPath];
//
参数
1:
要解析的
xml
串
参数
2:
随便
参数
3:
错误信息
GDataXMLDocument
*doc = [[
GDataXMLDocument
alloc
]
initWithData
:data
options
:
0
error
:
nil
];
//2.
获取文件的根节点
GDataXMLElement
*rootElement = [doc
rootElement
];
//3.
进一步搜索所有的子节点
//
返回一个装满了
student
节点(
GDataXMLElement
对象)的数组
NSArray
*stuArrray = [rootElement
elementsForName
:
@"student"
];
//4.
遍历数组,把
student
节点的每个子节点取出来
for
(
GDataXMLElement
*element
in
stuArrray) {
Student
*stu = [[
Student
alloc
]
init
];
GDataXMLElement
*nameElement = [[element
elementsForName
:
@"name"
]
lastObject
];
//
从
name
节点中取值
NSString
*value = [nameElement
stringValue
];
//
给学生对象的属性赋值
stu.
name
= value;
GDataXMLElement
*numberElement = [[element
elementsForName
:
@"number"
]
lastObject
];
value = [numberElement
stringValue
];
stu.
number
= value;
[
self
.
stuDomArray
addObject
:stu];
[stu
release
];
}
}
JSON解析
//
系统提供的
json
解析方法
NSString
*jsonPath = [[
NSBundle
mainBundle
]
pathForResource
:
@"Student"
ofType
:
@"txt"
];
NSData
*data = [
NSData
dataWithContentsOfFile
:jsonPath];
NSError
*error =
nil
;
//
参数
1:
文件数据
参数
2:
设置解析的结果
参数
3:
错误信息
NSArray
*array = [
NSJSONSerialization
JSONObjectWithData
:data
options
:
NSJSONReadingMutableContainers
error
:&error];
NSLog
(
@"%@"
,array);
for
(
NSDictionary
*dic
in
array) {
Student
*stu = [[
Student
alloc
]
init
];
stu.
name
= [dic
objectForKey
:
@"name"
];
stu.
sex
= [dic
objectForKey
:
@"sex"
];
stu.
phone
= [dic
objectForKey
:
@"phone"
];
stu.
number
= [dic
objectForKey
:
@"number"
];
[
self
.
stuArray
addObject
:stu];
[stu
release
];
}
第三方JSON解析包:JSONkit , SBJOSN
XML、JSON数据解析
标签:
json
xml
原文地址:http://blog.csdn.net/mr__hacker/article/details/45691223
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
36.VUE — 认识 Webpack 和 安装
2021-07-28
【PHP】上传图片翻转问题
2021-07-28
php对数字进行万。亿的转化
2021-07-28
五个 .NET 性能小贴士
2021-07-28
Three.js中显示坐标轴、平面、球体、四方体
2021-07-28
.net 5+ 知新:【1】 .Net 5 基本概念和开发环境搭建
2021-07-27
1.html,css
2021-07-27
基于Docker搭建 Php-fpm + Nginx 环境
2021-07-27
nginx + http + svn
2021-07-27
kubernets kube-proxy的代理 iptables和ipvs
2021-07-26
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!