前言:因为在开发中很可能会遇到html解析,如果后台提供的数据只有html数据,或者开发的app需要从web前端的html里获取数据,就需要html解析工具了。

关于HTML解析库,可以阅读:收集几个Objective-C的HTML解析库 了解。下面是我在学习开源项目Coding遇到用到了hpple解析工具,所以就拿出来学习然后总结总结一下了。

新建一个普通的工程,然后我使用了pod集成这个hpple库来使用:

然后我累解析解析index.html文件:

主要的代码:

 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
NSData * data = [NSData dataWithContentsOfFile:@"/Users/HeYang/Documents/Xcode/object-c/第三方库hpple的学习/hppleTest/hppleTest/index.html"];
NSLog(@"数据:%@",data);
TFHpple * doc = [[TFHpple alloc] initWithHTMLData:data]; NSArray * elements = [doc searchWithXPathQuery:@"//a"]; NSLog(@"a节点个数:%ld",elements.count);
for (int i = ; i < elements.count; i++) {
TFHppleElement * e = [elements objectAtIndex:i];
NSLog(@"1:%@",[e text]); // The text inside the HTML element (the content of the first text node)
NSLog(@"2:%@",[e tagName]); // "a"
NSLog(@"3:%@",[e attributes]); // NSDictionary of href, class, id, etc.
NSLog(@"4:%@",[e objectForKey:@"href"]); // Easy access to single attribute
NSLog(@"5:%@",[e firstChildWithTagName:@"img"]); // The first "b" child node
NSLog(@"===========解析完毕一次===========");
}
}

打印结果是:

-- ::00.251 hppleTest[:] 数据:<3c703ee4 b88be58d 88e4ba94 e782b9e5 a49ae5b0 b1e588b0 e8bebee4 ba86e79b aee79a84 e59cb0e7 a8bbe59f 8ee58ebf e59f8ee5 a283e586 85efbc8c e4bd8fe5 9ca8e4ba 86e4b880 e4b8aae5 85b7e69c 89e5be88 e5a5bde5 9cb0e790 86e4bd8d e7bdaee7 9a84e985 92e5ba97 efbc8ce4 bd86e698 afe6b2a1 e69c89e7 bd91e7bb 9ce6b2a1 e69c89e7 83ade6b0 b4efbc8c e68891e5 a5bde583 8fe9ab98 e58f8de4 ba86efbc 8ce4b880 e5a4a9e5 9d90e8bd a6efbc8c e79c8be5 88b0e4ba 86e8aeb8 e5a49ae7 9a84e7be 8ee4b8bd e699afe8 89b2efbc 8ce5a5bd e6bc82e4 baaee5a5 bde6bc82 e4baaeef bc8ce698 8ee5a4a9 e699afe5 8cbae79a 84e69c80 e4bd8ee6 b5b7e68b 94e59b9b e58d83e4 b8a4e799 bee5a49a e7b1b3ef bc8ce5b8 8ce69c9b e4b88de8 a681e9ab 98e58f8d e4ba86e2 80a6e280 a60a2020 20203c61  663d2268  3a2f2f64 6e2d636f 64696e67 2d6e6574 2d70726f  696f6e2d 70702e71 626f782e 6d652f62  3537392d  2d343633 642d6235 34662d35   6665622e 6a706722  6765743d 225f626c 616e6b22 20636c61 73733d22  6c652d6d 61726b64 6f776e2d 696d6167 652d6c69 6e6b2220 72656c3d 226e6f66 6f6c6c6f 77223e0a   3c696d67  3d226874 7470733a 2f2f646e 2d636f64 696e672d 6e65742d 70726f64  6f6e2d70 702e7162 6f782e6d 652f6265  37392d64 6339642d  2d623534 662d3531   65622e6a  616c743d  6c617373 3d226275 62626c65 2d6d6172 6b646f77 6e2d696d  3e0a2020 20203c2f 613e0a20 2020203c  65663d22  733a2f2f 646e2d63 6f64696e 672d6e65 742d7072 6f647563 74696f6e 2d70702e 71626f78 2e6d652f   2d636263 642d3466 63612d38 3632372d    2e6a7067   3d225f62 6c616e6b 2220636c 6173733d  626c652d 6d61726b 646f776e 2d696d61 67652d6c 696e6b22 2072656c 3d226e6f 666f6c6c 6f77223e 0a202020 203c696d  633d2268  3a2f2f64 6e2d636f 64696e67 2d6e6574 2d70726f  696f6e2d 70702e71 626f782e 6d652f30  6330352d  2d346663 612d3836 32372d39   3232662e 6a706722 20616c74 3d222220 636c6173 733d2262 7562626c 652d6d61 726b646f 776e2d69 6d616765 223e0a20 2020203c 2f613e0a 3c2f703e>
-- ::00.255 hppleTest[:] a节点个数:
-- ::00.256 hppleTest[:] : -- ::00.256 hppleTest[:] :a2016-- ::00.258 hppleTest[:] :{
nodeAttributeArray = (
{
attributeName = src;
nodeContent = "https://dn-coding-net-production-pp.qbox.me/bef3c579-dc9d-463d-b54f-51da3391cfeb.jpg";
},
{
attributeName = alt;
nodeContent = "";
},
{
attributeName = class;
nodeContent = "bubble-markdown-image";
}
);
nodeName = img;
raw = "<img src=\"https://dn-coding-net-production-pp.qbox.me/bef3c579-dc9d-463d-b54f-51da3391cfeb.jpg\" alt=\"\" class=\"bubble-markdown-image\"/>";
}
-- ::00.258 hppleTest[:] ===========解析完毕一次===========
-- ::00.258 hppleTest[:] : -- ::00.259 hppleTest[:] :a
-- ::00.259 hppleTest[:] :{
class = "bubble-markdown-image-link";
href = "https://dn-coding-net-production-pp.qbox.me/05309c05-cbcd-4fca-8627-9143b27b922f.jpg";
rel = nofollow;
target = "_blank";
}
-- ::00.259 hppleTest[:] :https://dn-coding-net-production-pp.qbox.me/05309c05-cbcd-4fca-8627-9143b27b922f.jpg
-- ::00.260 hppleTest[:] :{
nodeAttributeArray = (
{
attributeName = src;
nodeContent = "https://dn-coding-net-production-pp.qbox.me/05309c05-cbcd-4fca-8627-9143b27b922f.jpg";
},
{
attributeName = alt;
nodeContent = "";
},
{
attributeName = class;
nodeContent = "bubble-markdown-image";
}
);
nodeName = img;
raw = "<img src=\"https://dn-coding-net-production-pp.qbox.me/05309c05-cbcd-4fca-8627-9143b27b922f.jpg\" alt=\"\" class=\"bubble-markdown-image\"/>";
}

项目源码链接: http://pan.baidu.com/s/1eSK58eY 密码: g4ic

iOS开发之第三方库的学习--hpple的使用的更多相关文章

  1. iOS开发常用第三方库

    UI 动画 网络相关 Model 其他 数据库 缓存处理 PDF 图像浏览及处理 摄像照相视频音频处理 响应式框架 消息相关 版本新API的Demo 代码安全与密码 测试及调试 AppleWatch ...

  2. iOS开发 引用第三方库出现duplicate symbol时的处理方法

      该篇文章是我自己从我的新浪博客上摘抄过来的, 原文链接为: http://blog.sina.com.cn/s/blog_dcc636350102wat5.html     在iOS开发中, 难免 ...

  3. ios开发必备第三方库

    引言 作为iOS开发人员,在开发App的过程中怎么会不使用第三方库呢?相信没有App是不使用第三方库的! 网络库 网络库,这是开发必备,除非你的App玩单机.现在特别火也特别好用的网络库就数AFNet ...

  4. iOS开发——导入第三方库引起的unknown type name 'NSString'

    今天加入SVProgressHUD的第三方库的时候报了24个错误( too many errors emitted, stopping now),都是 expected identifier or ' ...

  5. iOS开发-常用第三方开源框架介绍

    iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser        实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...

  6. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  7. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

  8. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  9. iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework

    编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将 ...

随机推荐

  1. C语言之链表

    这两天在复习C语言的知识,为了给下个阶段学习OC做准备,以下的代码的编译运行环境是Xcode5.0版本,写篇博文把昨天复习的C语言有关链表的知识给大家分享一下,以下是小菜自己总结的内容,代码也是按照自 ...

  2. 【jQuery小实例】js 插件 查看图片

    ---本系列文章所用使用js均可在本博客文件中找到. 像淘宝一样,鼠标放在某一件商品上,展示大图信息,甚至查看图片的具体部位.给人超炫的效果,这种效果实现基于js文件和js插件.大致可以分为三步,添加 ...

  3. 原创:跳坑指南——微信小程序真机预览跟本地不同的问题

    微信小程序中出现最多的一个问题,就是真机跟本地不同:我简单列举一些我发现的原因,给大家参考,大家也可以把自己发现的东西回复给我,给我参考:本地看不到数据,就先让本地能看到数据,再看本帖.... 1:本 ...

  4. phpcurl 请求Chunked-Encoded data 遇到的一个问题

    最早出现的问题情况是提供es的部门在es的外部封装了一个gateway做请求中转. 当我们转换到gateway上之后,发现了问题: 有的请求可以获取到数据,有的请求获取不到数据. 仔细分析了业务代码, ...

  5. SQL Server时间粒度系列

        工作中经常遇到针对业务部门提出不同时间粒度(年.季度.月.周.日等等日期时间粒度,以下简称时间粒度)的数据统计汇总任务,也看到不少博友针对这方便的博文,结合SQL Server的日期时间函数和 ...

  6. 分离的思想结合单链表实现级联组件:CascadeView

    本文介绍自己最近做省市级联的类似的级联功能的实现思路,为了尽可能地做到职责分离跟表现与行为分离,这个功能拆分成了2个组件并用到了单链表来实现关键的级联逻辑,下一段有演示效果的gif图.虽然这是个很常见 ...

  7. 【转】App开放接口api安全性—Token签名sign的设计与实现

    前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...

  8. WinFrom 公共控件 Listview 的使用

    Listview绑定数据库数据展示与操作使用  1.拖一个Listview控件到项目中先将视图改为Details 2.编辑列 设置列头  添加columnHeader成员 Text 是显示的名称 3. ...

  9. [WCF编程]12.事务:服务事务编程(上)

    一.设置环境事务 默认情况下,服务类和操作没有环境事务,即使客户端事务传播到服务端也是如此. 尽管强制事务流从客户端传播过来,但服务端的环境事务依旧为null.为了启用环境事务,每个操作必须告诉WCF ...

  10. linq lambda let

    1.linq let用法 var query = from x in db.Users let theage = x.age let sexstring = x.sex ? "男" ...