ios开发之网络访问的数据类型
1> JSON
特点:1、 [ ] 表示数组 {} 表示字典 - 对象模型建立关系
2、 应用非常多,基本上移动开发的主要数据传输都是JSON
要使用JSON,从网络上获取到数据data后,直接使用下面的方法进行反序列化
// 用于将NSData类型数据反序列化为字典或者数组,具体转换类型取决于JSON最外面的括号是[]或者{}
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
2> XML
特点:传输量大,解析困难,使用较少
// 根据从网络获取的数据data初始化一个解析器
NSXMLParser *paser = [[NSXMLParser alloc] initWithData:data]; // 设置代理
paser.delegate = self; // 开始解析
[paser parse];
/*6个代理方法*/
// 1. 开始解析文档,在这里做初始化工作
- (void)parserDidStartDocument:(NSXMLParser *)parser
// 2. 解析一个节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
// 3. 查找节点内容,可能会多次
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
// 4. 节点完成
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
// 5. 解析完成,做收尾工作
- (void)parserDidEndDocument:(NSXMLParser *)parser
// 6. 解析出错,清理中间数据
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
小技巧:在可能的情况下,尽量将所有的属性设置到一个节点中的属性节点中,如此只需要第二步即可(第二步attributeDict会包含所有的属性键值对),避免了大量的拼接工作
// 格式如下
<book pages="" index="">
<item id="" title="错入豪门" tag="都市言情" source="/upload/file/2013_07_4/2013718101155179.zip" author="唯一的迷蝶" updatetime="2013-6-21 11:06:17" summary="新婚之夜、她..." clicks="" words="" logo="/upload/pic/2013_06_5/20136211172503.png" jx="False" />
</book>
3> HTML
通常用于自己没有服务器,或者某些网络资源确实非常重要!可以实现抓取以备不时之需。
例如:省、市、地区、邮政编码、身份证的前6位归属
要使用HTML可以利用正则表达式进行解析
要使用正则表达式步骤
1> 指定匹配方案
* 打开网页源代码,找到需要抓取的部位
* 将前后标记一起复制到代码中,然后用(.*?)替代我们需要抓到的内容即可
* 匹配方案必须要能够和页面内容唯一匹配
2> 实例化正则表达式,需要指定两个选项
NSRegularExpressionCaseInsensitive 忽略大小写
NSRegularExpressionDotMatchesLineSeparators 让.能够匹配换行
3>
* 使用firstMatchInString查找第一个与匹配方案相同的内容
* 使用matchesInString可以查找多个与匹配方案相同的内容,
通常用在
<li></li> 在html里面标示无符号的序列
<ol></ol> 在html里面标示数字的序列
4> 根据result的rangeAtIndex方法,获取到要抓取的内容
第一个括号对应的索引是1,第二个是2,依次类推
5> 根据range,使用字符串的substringWithRange方法,可以获得准确的内容
在正则表达式中,需要做出错处理,因为如果方案书写不正确,regex是不能被实例化的
/*下面的代码简单的演示了抓取数据的过程*/
NSString *pattern = @"<h3>基本释义</h3>(.*?)<h3>双解释义</h3>"; // pattern 是自定义的正则表达 ()里为我们想要截取的内容 NSString *str = [html firstMatchWithPattern:pattern]; // html 是从网页获取的源代码html格式
#pragma mark 根据正则表达式获取字符串
- (NSString *)firstMatchWithPattern:(NSString *)pattern // 自定义方法
{ NSError *error = nil; NSRegularExpression *regular = [[NSRegularExpression alloc] initWithPattern:pattern options:NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators error:&error]; // 错误处理
if (error) { NSLog(@"正则表达式出错%@", error.localizedDescription); return nil;
} NSTextCheckingResult *result = [regular firstMatchInString:self options:NSMatchingReportCompletion range:NSMakeRange(, self.length)]; // 错误处理
if (!result) { NSLog(@"没有找到合适的匹配项"); return nil;
} NSRange range = [result rangeAtIndex:]; return [self substringWithRange:range];
}
ios开发之网络访问的数据类型的更多相关文章
- iOS开发之网络编程--5、NSURLSessionUploadTask+NSURLSessionDataDelegate代理上传
前言:关于NSURLSession的主要内容快到尾声了,这里就讲讲文件上传.关于文件上传当然就要使用NSURLSessionUploadTask,这里直接讲解常用的会和代理NSURLSessionDa ...
- iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>
前言:根据前篇<iOS开发之网络编程--2.NSURLSessionDownloadTask文件下载>或者<iOS开发之网络编程--3.NSURLSessionDataTask实现文 ...
- iOS开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)
前言:使用NSURLSessionDownloadTask满足不这个需要离线断点续传的下载需求,所以这里就需要使用NSURLSessionDataTask的代理方法来处理下载大文件,并且实现离线断点续 ...
- iOS开发之网络编程--2、NSURLSessionDownloadTask文件下载
本文内容大纲: 1.回顾NSURLSessionTask 2.NSURLSessionDownloadTask大文件之block下载 3.NSURLSessionDownloadTask大文件之代理方 ...
- iOS开发之网络编程--使用NSURLConnection实现文件上传
前言:使用NSURLConnection实现文件上传有点繁琐. 本文并没有介绍使用第三方框架上传文件. 正文: 这里先提供用于编码测试的接口:http://120.25.226.186:3281 ...
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄
前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传. 在实际开发中,输入输出流用的比较少,但 ...
- iOS开发之网络编程--使用NSURLConnection实现大文件下载
主要思路(实现下载数据分段写入缓存中) 1.使用NSURLConnectionDataDelegate以及代理方法.2.在成功获取响应的代理方法中,获得沙盒全路径,并在该路径下创建空文件和文件句柄.3 ...
- iOS开发之网络编程--小文件下载
文件下载方式: 如果下载的文件比较小,下载方式: 直接用NSData的 +(id)dataWithContentsOfURL:(NSURL*)url; 利用NSURLConnection发送一个HTT ...
- IOS开发之网络开发工具
IOS开发之网络开发工具 做移动端开发 常常会涉及到几个模块:1.网络检測 2.网络请求get和post请求 3.文件上传 4.文件下载 5.断点续传 如今将这些一一分享给大家 ,也欢迎 ...
随机推荐
- 利用kvc对UITabBar上的UITabBarButton的尝试修改.md
一.前言 一次比较懒的想法,不想自定义UITabBar,也不想用第三方框架,于是想尝试修改苹果私有类来达到部分效果 效果如下 点击tabBar 上的按钮,图片有变大再变小的动画 tabBar 上某个按 ...
- JavaScript学习笔记 - 进阶篇(1)- JS基础语法
前言 JavaScript能做什么? 1.增强页面动态效果(如:下拉菜单.图片轮播.信息滚动等) 2.实现页面与用户之间的实时.动态交互(如:用户注册.登陆验证等) JS进阶篇学习什么? 在JavaS ...
- iOS相机操作笔记
最近忙于项目,需要拍摄图片,这里先列出部分测试代码. // // FirstViewController.m // UiTest // // Created by Tang Huaming on 16 ...
- align=absMiddle属性设置
AbsBottom 图像的下边缘与同一行中最大元素的下边缘对齐.AbsMiddle 图像的中间与同一行中最大元素的中间对齐.Baseline 图像的下边缘与第一行文本的下边缘对齐.Bottom 图像的 ...
- c# 分页控件
因为最近做的培训项目需要用到很多分页功能,自己写了一个分页方法,想找个时间重构,看到一篇博客,转载过来,分享学习. 原文链接:http://www.cnblogs.com/rr163/p/395593 ...
- js学习笔记一-语法结构
js是区分大小写的,关键字.变量.函数名和所有的标识符都必须采取统一一致的大小写形式. js定义了unicode转义序列,以\u开头,其后跟随四个十六进制数,可以在字符串直接量.正则表达式直接量和标识 ...
- 通过百度地图API定位--第三方开源--百度地图(一)
1.把百度地图定位API(下载地址:http://lbsyun.baidu.com/sdk/download?selected=location)里面的libs复制到自己的项目libs里面 2.进行相 ...
- python杂记-2(python之文件)
文件打开函数:f = open 表1-1:open函数中模式参数常用值 打开模式 描述 'r' 读模式 'w' 写模式 'a' 追加模式 'b' 二进制模式 '+' 读/写模式 表1-2:文件对象方法 ...
- Linux下C程序插入执行shell脚本
1.system(执行shell命令) 相关函数 fork,execve,waitpid,popen表头文件 #include<stdlib.h>定义函数 int system(const ...
- 如何参与linux 内核开发
如果想评论或更新本文的内容,请直接联系原文档的维护者.如果你使用英文 交流有困难的话,也可以向中文版维护者求助.如果本翻译更新不及时或者翻 译存在问题,请联系中文版维护者. 英文版维护者: Gre ...