付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、XML & JSON讲师:刘凡技术博客: XML & JSON 简介XML可扩展标记语言用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言易读性高,编码手写难度小,数据量大JSON作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式基于JavaScript的一个子集易读性略差,编码手写难度大,数据量小JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中演练程序目标点击下方的两个按钮分别从服务器解析XML和JSON
2、格式的数据,然后将数据绑定至表格。准备项目简介Video类,用于保存视频对象信息videoTime只读属性,视频时长格式字符串videoImage只读属性,从imageURL加载图像VideoTableCell类,用于自定义单元格显示setSelected:animated:方法设置单元格选中效果ViewController类_dataList保存数据信息loadXMLData方法:负责XML数据解析loadJSONData方法:负责JSON数据解析准备项目中,简单初始化了一些数据便于查看示例运行效果XML解析原理介绍NSXMLParser解析方法NSXMLParser是SAX方法解析SAX(
3、Simple API for XML)只能读,不能修改,只能顺序访问,适合解析大型XML,解析速度快常应用于处理大量数据的XML,实现异构系统的数据访问,实现跨平台从文档的开始通过每一节点移动,定位一个特定的节点DOM(Document Object Model)不仅能读,还能修改,而且能够实现随机访问,缺点是解析速度慢,适合解析小型文档一般应用与小型的配置XML,方便操作为载入到内存的文档节点建立类型描述,呈现可横向移动、潜在巨大的树型结构在内存中生成节点树操作代价昂贵NSXMLParser解析过程1. 创建NSXMLParser实例,并传入从服务器接收的XML数据2. 定义解析器代理3.
4、解析器解析4. 通过解析代理方法完成XML数据的解析NSXMLParser解析代理方法/ 1. 开始解析某个元素,会遍历整个XML,识别元素节点名称- (void)parser:didStartElement:namespaceURI:qualifiedName:attributes:/ 2. 文本节点,得到文本节点里存储的信息数据,对于大数据可能会接收多次!为了节约内存开销- (void)parser:foundCharacters:/ 3. 结束某个节点,存储从parser:foundCharacters:方法中获取到的信息- (void)parser:didEndElement:name
5、spaceURI:qualifiedName:注意:在解析过程中,上述三个方法会不停的重复执行,直到遍历完成为止/ 4. 开始解析XML文档- (void)parserDidStartDocument:/ 5. 解析XML文档结束- (void)parserDidEndDocument:/ 6. 解析出错- (void)parser:parseErrorOccurred:XML解析演练要解析的XML内容XML解析演练(1)准备工作注释测试数据代码遵从NSXMLParserDelegate协议interface ViewController : UIViewController 定义XML元素字
6、符串interface ViewController () / 数据列表 NSMutableArray *_dataList; / XML 元素字符串 NSMutableString *_elementString; / 当前解析视频信息对象 Video *_currentVideo;endXML解析演练(2)loadXMLData方法/ 定义URLNSString *urlStr = NSString stringWithFormat:%/itcast/videos.php?format=xml, WEB_ROOT_URL;NSURL *url = NSURL URLWithString:u
7、rlStr;/ 获取网路数据,注意:如果是真正的网络访问不能这么处理!NSData *data = NSData dataWithContentsOfURL:url;/ 1. 创建NSXMLParser实例,并传入从服务器接收的XML数据NSXMLParser *parser = NSXMLParser allocinitWithData:data;/ 2. 定义解析器代理parser setDelegate:self;/ 3. 运行解析器parser parse;NSXMLParser代理(1)开始解析XML文档/ 4. 开始解析XML文档- (void)parserDidStartDocu
8、ment:(NSXMLParser *)parser NSLog(开始解析XML文档); / 初始化数据数组 if (_dataList = nil) _dataList = NSMutableArray array; else _dataList removeAllObjects; / 初始化元素字符串 if (_elementString = nil) _elementString = NSMutableString string; else _elementString setString:; NSXMLParser代理(2)开始解析某个元素/ 1. 开始解析某个元素,会遍历整个XML,
9、识别元素节点名称- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict / 判断元素节点是否为video if (elementName isEqualToString:video) / 如果已经开始解析,此方法调用时,是开始新的解析,因此需要将此前的视频元素添加到数组 if (
10、_currentVideo) _dataList addObject:_currentVideo; / 新建视频元素 _currentVideo = Video allocinit; / 判断是否存在属性id节点 if (attributeDictid) / 设置视频对象的id属性 _currentVideo setId:attributeDictidintegerValue; / 注意:确保解析文本节点之前,元素字符串内容为空 _elementString setString:;NSXMLParser代理(3)解析文本节点/ 2. 文本节点,得到文本节点里存储的信息数据,对于大数据可能会接收
11、多次!- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string / 追加文本节点内容 / 注意在前面方法已经将_elementString赋为空字符串 / 从而能够保证大数据的追加 _elementString appendString:string; NSXMLParser代理(4)结束某个节点/ 3. 结束某个节点,存储从parser:foundCharacters:方法中获取到的信息- (void)parser:(NSXMLParser *)parser didEndElement:(NSString
12、*)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName NSString *str = NSString stringWithString:_elementString; / 根据elementName,用解析的节点内容设置当前视频对象属性 if (elementName isEqualToString:name) _currentVideo setName:str; else if (elementName isEqualToString:length) _currentVideo
13、 setLength:str integerValue; else if (elementName isEqualToString:videoURL) _currentVideo setVideoURL:NSString stringWithFormat:%, WEB_ROOT_URL, str; else if (elementName isEqualToString:imageURL) _currentVideo setImageURL:NSString stringWithFormat:%, WEB_ROOT_URL, str; else if (elementName isEqualT
14、oString:description) _currentVideo setDescription:str; else if (elementName isEqualToString:teacher) _currentVideo setTeacher:str; NSXMLParser代理(5)解析结束及出错处理/ 5. 解析XML文档结束- (void)parserDidEndDocument:(NSXMLParser *)parser NSLog(解析XMl文档结束); / 将最后一个视频对象添加至数据列表 / 注意如果不释放当前视频对象,重新刷新会出错! _dataList addObje
15、ct:_currentVideo; / 释放当前视频对象 _currentVideo = nil; / 刷新表格 _videosTable reloadData;/ 6. 解析出错- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError NSLog(解析XML文档出错:%, parseError.localizedDescription); / 需要清空一下数据!代码省略运行看看效果: 本节知识点回顾(1)NSXMLParser解析过程1. 创建NSXMLParser实例,并传入从服务器接收的XM
16、L数据2. 定义解析器代理3. 运行解析器4. 通过解析代理方法完成XML数据的解析本节知识点回顾(2)NSXMLParser代理方法/ 1. 开始解析某个元素,会遍历整个XML,识别元素节点名称- (void)parser:didStartElement:namespaceURI:qualifiedName:attributes:/ 2. 文本节点,得到文本节点里存储的信息数据,对于大数据可能会接收多次!- (void)parser:foundCharacters:/ 3. 结束某个节点,存储从parser:foundCharacters:方法中获取到的信息- (void)parser:di
17、dEndElement:namespaceURI:qualifiedName:注意:在解析过程中,上述三个方法会不停的重复执行,直到遍历完成为止/ 4. 开始解析XML文档- (void)parserDidStartDocument:/ 5. 解析XML文档结束- (void)parserDidEndDocument:/ 6. 解析出错- (void)parser:parseErrorOccurred:JSON解析介绍解析服务器端返回的JSON数据作为一种轻量级的数据交换格式,JSON正在逐步取代XML,成为网络数据的通用格式从iOS 5开始,使用NSJSONSerialization对JSO
18、N解析其他常见的三种JSON解析第三方库:SBJsonJSONKitTouchJson从性能上来说,NSJSONSerialization最好,JSONKit其次。SBJson使用较为广泛,API简单易用JSON解析演练要解析的JSON内容JSON解析演练(1)loadJSONData方法(部分)/ 加载JSON数据- (IBAction)loadJSONData:(id)sender / 定义URL NSString *urlStr = NSString stringWithFormat:%/itcast/videos.php?format=json, WEB_ROOT_URL; NSURL
19、 *url = NSURL URLWithString:urlStr; / 获取网络数据 NSData *data = NSData dataWithContentsOfURL:url; / 反序列化JSON数据,生成NSArray NSArray *array = NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil; / 将JSON字典写入文件,便于调试 NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDo
20、cumentDirectory, NSUserDomainMask, YES); NSString *docDir = docs0 ponent:jsonArray.plist; array writeToFile:docDir atomically:YES;JSON解析演练(2)保存的plist文件JSON解析演练(3)/ 初始化数据数组if (_dataList = nil) _dataList = NSMutableArray array; else _dataList removeAllObjects;/ 填充数组for (NSDictionary *dict in array) Vi
21、deo *video = Video allocinit; video setId:dictidintegerValue; video setName:dictname; video setLength:dictlengthintegerValue; video setVideoURL:NSString stringWithFormat:%, WEB_ROOT_URL, dictvideoURL; video setImageURL:NSString stringWithFormat:%, WEB_ROOT_URL, dictimageURL; video setDescription:dic
22、tdescription; video setTeacher:dictteacher; _dataList addObject:video;/ 刷新表格_videosTable reloadData;运行看看效果: 本节知识点回顾JSON是轻量级的数据交换格式,正逐步取代XML,成为通用网络数据格式从iOS 5开始,使用NSJSONSerialization对JSON解析使用类方法JSONObjectWithData:options:error:可以将接收到的JSON数据反序列化为NSArray或NSDictionary等对象演练收尾播放视频! 准备工作1. 添加MediaPlayer.fra
23、mework框架2. 变量及方法定义#import interface ViewController () / / 视频播放器 MPMoviePlayerController *_player;/ 视频播放回调函数- (void)movieFinishedCallback:(NSNotification *)notification;end表格行选中事件处理/ 视频播放URLNSURL *videoURL = NSURL URLWithString:video videoURLstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding;/ 视频播放对象if (_player = nil) _player = MPMoviePlayerController allocinitWithContentURL:videoURL; else _player setContentURL:videoURL;/ 设置播放器视图边框_player.view se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 骨盆旋转的康复训练
- 预检分诊护理技术规范
- 心衰的治疗动画讲解
- 钢铁厂质量检验规范
- 2026年广东省深圳市龙岗区第二高级中学高考语文模拟试卷
- 某冶金厂生产监管准则
- 2026中国智能穿戴设备行业市场供需趋势研究及投资机遇评估规划报告
- 河北省唐山市友谊中学2027届化学九上期中学业质量监测模拟试题含解析
- 2027届四川省凉山州西昌市化学九上期中质量检测试题含解析
- 10万吨酒精可行性研究报告
- 2025年旅游管理运营能力考核试题及答案解析
- 血透患者运动康复指导
- 幼儿园教师意识形态培训内容
- 肥料成品库管理制度
- 公司抵质押品管理制度
- T/QQCA 003-2022藏医坛轮(札麦承廓)疗法技术规范
- 大额存单认购协议书模板
- 2025年办公园区前期物业管理服务协议
- 2025年广东省惠州市惠城区市场监督管理局招聘历年高频重点提升(共500题)附带答案详解
- GB/T 45085-2024再生资源回收利用网络信息存证规范
- 服饰品配件设计概论
评论
0/150
提交评论