首页 技术 正文
技术 2022年11月23日
0 收藏 395 点赞 4,194 浏览 2754 个字

  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];
}

  

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:7,947
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:4,824
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:5,651
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:5,517
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:6,718
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,188