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 ...
随机推荐
- Scroller 实现的弹性回弹的LinearLayout
由于公司业务发展,多app需求很少,被调到java后台开发接口三个月了,还要我继续做 java,最近有点想换工作,不得不重新看看基础知识了. 晚上看到了滑动的实现方式,平滑滑package com.e ...
- linux笔记:linux常用命令-目录和文件处理命令
命令格式: 命令 [-选项] [参数] 例: ls -la /etc 注意:个别命令的使用不遵循此格式. 目录处理命令:ls(列目录) 更多选项: -h 以kb等利于人阅读的方式取代字节显示文件大小 ...
- Principle and Application of Database System
<数据库系统原理与应用>课程教学大纲 英文名称:Principle and Application of Database System 课程类型:专业必修课 学时/学分:48+16/3. ...
- nyoj 115------城市平乱( dijkstra // bellman )
城市平乱 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安,这M个城市 ...
- 166. Fraction to Recurring Decimal -- 将除法的商表示成字符串(循环节用括号表示)
Given two integers representing the numerator and denominator of a fraction, return the fraction in ...
- 超详细的Xcode代码格式化教程,可自定义样式。
超详细的Xcode代码格式化教程,可自定义样式. 为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题.在之前,我们可能会写完代码后,再 ...
- Facebook 内部高效工作PPT
Facebook 内部分享:不论你如何富有,你都赚不到更多的时间,你也回不到过去.没有那么多的假如,只有指针滴答的时光飞逝和你应该好好把握的现在,以下26张PPT的分享将为您带来时间价值管理的技巧. ...
- nyoj-746
整数划分(四) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...
- [整理]Linux压缩与解压缩命令整理。
一.压缩文件命令 1.*.Z compress 程序压缩的档案:2.*.bz2 bzip2 程序压缩的档案:3.*.gz gzip 程序压缩的档案:4.*.tar tar 程序打包的数据,并没有压缩过 ...
- DataGridView批量执行Insert和Remove行时特别慢的解决方案
向DataGridView循环插入110条数据耗时5秒多. 在循环前执行: var oldAutoSizeRowsMode = this.AutoSizeRowsMode; var oldAutoSi ...