JSON解析和XML解析
一、 XML:用到一个开源解析类,GDataXMLNode(将其加入项目中),添加libxml2.dylib框架
经常用到的方法:
1.- (id)initWithXMLString:(NSString *)str options:(unsigned int)mask error:(NSError *)error
2.- (id)initWithData:(NSData *)data options:(unsigned int)mask error:(NSError *)error
这两个方法可以将NSString类型或者NSData类的数据转化为GDataXMLNode类可以解析的XML文档
3.- (GDataXMLElement *)rootElement 返回GDataXMLElement中所有节点信息
4.- (NSArray *)elementsForName:(NSString *)name 返回当前节点下名称为name的所有节点,返回值为数组。
5.- (NSString *)stringValue 返回节点中间的值。
二、 JSON:用到开源的框架SBJSON,对NSString类的扩展,我们程序中的所有NSString对象都可以调用其中的方法。
SBJSON的方法- (id)JSONValue 此方法返回一个ID类对象,因为JSON信息都是以键值来传输的,所以我们会用NSDictionary来接收这个返回值。
两种结构:
1.“键值对”的集合。对象(object),记录(Record),结构(struct),字典(dictionary),哈希表(hashtable),键列表(keyed list),关联数组(associative array)。
2.值的有序列表。数组(Array)。
JSON解析
1大括号代表字典
2中括号(小括号)代表数组
3冒号的左右两边分别为键和值(key:value)
4数据和数据之间用逗号隔开
我们在本机上创建一个file.xml,进行解析,并取出年龄35
//JSON解析
本地读取student.xml文件
NSString *jstr=[NSString stringWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"File" ofType:@"json"] encoding:NSUTF8StringEncoding error:nil];//取到路径
//进行解析,因为最外面是字典,所以要用字典类型的对象来接
NSDictionary *dic=[jstr JSONFragmentValue];
//下面取值
//取到hello这个key,取到的是数组里的内容所以要用数组来接
NSArray *arr=[dic objectForKey:@"hello"];
//取到下标为1的数组,因为数组里面又是一个字典,所以用字典来接
NSDictionary *dic2=[arr objectAtIndex:1];
//取到字典key为age的value,因为取出来的值是字符串,用字符串来接
NSString *jage=[dic2 objectForKey:@"age"];
//输出取出的age
NSLog(@"%@",jage);
//XML解析
同样我们也在本地创建一个File.xml的文件里面包含:
<students>
<student>
<name>kellen</name>
<age>25</age>
<sex>M</sex>
</student>
<student>
<name>jack</name>
<age>35</age>
<sex>M</sex>
</student>
</students>
//step1:本地读取student.xml文件
//获取目录的xml文件
NSString*xmlPath=[[NSBundle mainBundle]pathForResource:@"File" ofType:@"xml"];
NSData*xmlData=[[NSData alloc]initWithContentsOfFile:xmlPath];
//step2:将包含xml内容的字符串转化为document对象
GDataXMLDocument*xmldoc=[[GDataXMLDocument alloc]initWithData:xmlData options:0 error:nil];
//step3:获取到根节点
//获取根节点(students)
GDataXMLElement*rootElement=[xmldoc rootElement];
//step4:遍历节点信息
//获取根节点下的节点(student)
NSArray*students=[rootElement elementsForName:@"student"];
NSLog(@"%@",students);
//使用forin遍历XML中的所有数据
for (GDataXMLElement*stu in students) {
//获取name节点的属性
GDataXMLElement*nameElement=[[stu elementsForName:@"name"]objectAtIndex:0];
NSString*name=[nameElement stringValue];//获取nameElement
NSLog(@"Student name is:%@",name);
//获取age节点的属性
GDataXMLElement*ageElement=[[stu elementsForName:@"age"]objectAtIndex:0];
NSString*age=[ageElement stringValue];
NSLog(@"User age is :%@",age);
}
}
JSON解析和XML解析的更多相关文章
- JSON解析和XML解析对比
JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...
- QF——网络之JSON解析和XML解析
JSON解析和XML解析: 用苹果原生的代理方式的网络请求后返回的都是二进制数据(NSData). 若是json,则通过NSJSONSerialization把NSData数据转换为JSON对象. N ...
- Cocos2d-x 3.0 Json用法 Cocos2d-x xml解析
Cocos2d-x 3.0 加入了rapidjson库用于json解析.位于external/json下. rapidjson 项目地址:http://code.google.com/p/rapidj ...
- java中json解析,xml解析
抓取网页内容,会返回json或者xml(html)格式的数据. 为了方便的对上述两种格式的数据进行解析,可采用解析工具. JsonPath https://github.com/jayway/Json ...
- UI进阶 解析XML 解析JSON
1.数据解析 解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JSO ...
- 数据解析之XML和JSON
1. 解析的基本的概念 解析:从事先规定好的格式中提取数据 解析前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JOSN解析 2. X ...
- 【.Net 】Json和Xml解析
引言 Json和Xml是现在跨平台传输数据的主流格式,关于它们的解析,网上资料很多,我稍作整理,写成一个小demo,方便日后使用. JSON解析 能进行json解析的类库有很多,例如Ja ...
- 网络数据的XML解析
网络应用中的数据解析,因为最近的应用,无论是Android的和ios平台的,一直用也是建议用的都是Json解析, xml解析都有点被遗忘了. 然后最近自己在做着玩一个ios的小应用,涉及网络数据的抓取 ...
- XML解析之DOM详解及与SAX解析方法的比较
XML解析(DOM) XML文件解析方法介绍 我们所用到的NSXMLParser是采用SAX方法解析 SAX(Simple API for XML) 只能读,不能修改,只能顺序访问,适合解析大型XML ...
随机推荐
- 【转】loading 三种实现方式
转载:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=76872 一.通过动画实现 定义res/anim/loading.xml如 ...
- JQuery & Javascript
Jquery 是一个优秀的javascript框架,是轻量级的js库 jQuery简化了javascript 编程 jQuery很容易学习
- SAP 物料主数据屏幕增强
1. 用事务代码OMT3C,(或者用SPRO进入,后勤-常规->物料主记录->配置物料主记录->创建定制子屏幕的程序)创建函数功能组,如ZMGD1,然后保存. 2. 用事务代码SE8 ...
- 华为面试题——一道关于指针方面的编程题(C/C++)
int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素 ...
- UIStepper
@在IOS5中增加了一个UIStepper的新控件,UIStepper可以连续增加或减少一个数值.控件的外观是两个水平并排的按钮构成,一个显示为“+”,一个显示为“-”. 1. 初始化控件 UISte ...
- img下出现几像素空白的问题
先看一个例子和效果,应该就会明白我的问题了. <meta http-equiv="Content-Type" content="text/html; charset ...
- 【转载】SAP的标准对话框函数
http://blog.sina.com.cn/s/blog_721b218c01012j0y.html 在用户设计sap的程序时,经常需要一些对话框,用户可以自己编写,但使用SAP系统中提供了的对话 ...
- jQuery学习小结3——AJAX
一.jQuery的Ajax方法 jQuery对Ajax 做了大量的封装,使用起来也较为方便,不需要去考虑浏览器兼容性.对于封装的方式,jQuery 采用了三层封装: 最底层的封装方法为——$.ajax ...
- 436. Find Right Interval ——本质:查找题目,因此二分!
Given a set of intervals, for each of the interval i, check if there exists an interval j whose star ...
- 一段linux shell 代码涉及for循环和if esle
if [ 0 -ne $# ]; then echo "USAGE: prog [IN]input_file" >&2; exit 1;fisource /etc/p ...