swift html 数据解析,Swift MWResolver解析HTML/XML
上篇文章Swift 最简单的方式来解析HTML我通过截取字符串的方式,很艰难的实现了一个解析HTML的方式,但是过程相当难受,并且扩展性不强,适应性也很糟糕。
libxml2
libxml2的官网在这里:http://xmlsoft.org/html/index.html,当你想通过官网去学习libxml2的话,我觉得会相当困难,因为它只有头文件已经简单的函数描述,所以在这里:Matt Gallagher,它写了一个包装器使我们使用libxml2更方便一些。
MWResolver
MWResolver是我在libxml2上进行的一层Swift版本的封装,可以通过纯Swift的方式来解析HTML/XML,先看一下需求:
还是以SwiftDoc为例,我们从源码中,想获取到所有的标签li里面的第一行的内容(AnyBidirectionalCollection),用MWResolver这么写就可以了:
let resolver = MWResolver(data: data)
guard let element = resolver.peekParse(query: "//div[@class='col-sm-6']//li//a") else { return }
print(element.content)
// 打印:AnyBidirectionalCollection
有了这个神器,可以说什么网站网页都不怕了,下面我来一个比较完整的实例,解析SwiftDoc:
首先我们先拿到所有的标题:
let resovler = MWResolver(data: data)
let elementH2s = resovler.parse(query: "//article[@class='content']//h2")
for ele in elementH2s {
print(ele.content)
}
// 打印:
Types
Protocols
Operators
Globals
为了便于查看我们拿最少的Globals下的所有函数:
let elementLis = resovler.parse(query: "//li/a")
var contents = [String]()
for ele in elementLis {
guard let content = ele.attributes["href"] else { return }
if content.hasPrefix("/v3.1/func/") {
contents.append(content)
print(content)
}
}
// 打印:
/v3.1/func/abs
/v3.1/func/assert
/v3.1/func/assertionFailure
/v3.1/func/debugPrint
/v3.1/func/dump
/v3.1/func/fatalError
/v3.1/func/getVaList
/v3.1/func/isKnownUniquelyReferenced
/v3.1/func/max
/v3.1/func/min
/v3.1/func/numericCast
/v3.1/func/precondition
/v3.1/func/preconditionFailure
/v3.1/func/print
/v3.1/func/readLine
/v3.1/func/repeatElement
/v3.1/func/sequence
/v3.1/func/stride
/v3.1/func/swap
/v3.1/func/transcode
/v3.1/func/type
/v3.1/func/unsafeBitCast
/v3.1/func/unsafeDowncast
/v3.1/func/withExtendedLifetime
/v3.1/func/withUnsafeBytes
/v3.1/func/withUnsafeMutableBytes
/v3.1/func/withUnsafeMutablePointer
/v3.1/func/withUnsafePointer
/v3.1/func/withVaList
/v3.1/func/withoutActuallyEscaping
/v3.1/func/zip
也就是对应的SwiftDoc中这些数据:
如何使用:
把上面三个文件导入到项目中。
导入libxml2
在header search path 中 + ${SDK_ROOT}/usr/include/libxml2
引入桥文件支持OC+Swift混编
swift html 数据解析,Swift MWResolver解析HTML/XML相关推荐
- swift php json解析,Swift 4.0 | JSON数据的解析和编码
文 / 菲拉兔 自己撸的图 要求: Platform: iOS8.0+ Language: Swift4.0 Editor: Xcode9 [问题补充2017-09-28] 最近我发现了一个问题:在S ...
- Swift - 使用原生库进行 JSON 解析和生成
快速入门 JSON(JavaScript Object Notation)是应用在 JavaScript 语言上的数据格式,常用于网络数据交换和存储.Apple 在Foundation模块中集成了 J ...
- swift创建嵌套模型使用yy_model解析json
依然是使用swift混编,因为现在的项目是oc项目,但是不想写太多oc代码,所以用swift创建模型.因为swift创建模型可以很方便的输入默认值代码量也少,这样在读取json的时候就不用担心,因为j ...
- 经典大数据面试题及解析
经典大数据面试题及解析 1.下列哪个属性是hdfs-site.xml中的配置? A.dfs.replication B.fs.defaultFS C.mapreduce.framework.name ...
- Android网络之数据解析----SAX方式解析XML数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Xml 格式数据的生成和解析
相关阅读 XML约束 Xml 格式数据的生成和解析 XML解析器 什么是XML XML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记 ...
- 大数据 清华 覃征_2021年清华(清华大学)大数据工程考研难度解析、考研经验分享...
[盛世清北] 2021年清华考研备考已经开始,由于很多学生苦于在清华考研备考过程中,不知道如何查找资料,如何把握重点,甚至不确定如何准确设定备考计划,对此,盛世清北整理了清华各专业等一些列专业考研干货 ...
- [转]关于数据中台、数据平台、数据仓库、数据湖等数据概念的对比解析
前言 2010年左右,还是在上学的时候,学过一门课程叫<数据仓库与数据挖掘>,那还是属于传统数据的时代,我们会讨论什么是数据仓库?什么是数据集市?数据仓库和数据库有什么区别?等等,当我还在 ...
- mysql数据库迁徙_Mysql数据迁徙方法工具解析
这篇文章主要介绍了mysql数据迁徙方法工具解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 数据迁徙是每个后端都会遇到的工作之一,本文介绍了一些 ...
最新文章
- document.forms用法
- 前端学习(3070):vue+element今日头条管理-删除文章400
- vue动态生成下拉框_解决vue动态下拉菜单 有数据未反应的问题
- Codeforces Round #327 div2
- C# 通过PostMessage完成UI的更新
- 2022秋招面经(C++软开)
- c语言24小时计时法转换为12小时,12时24时换算题(24小时和12小时换算方法)
- 计算机常用文献管理工具,工具丨5款常用的文献管理软件
- 基于ROS的机器人模型建立及3D仿真【物理/机械意义】
- 山东大学研究生计算机学院导师,山东大学计算机科学与技术学院研究生导师简介-杨义军...
- 计算机无法删除tf卡的内容,SD卡不能删除文件并且插电脑上无法格式化
- 单元测试利器 - Mock
- Bigemap支持百度地图
- 关于video++,jsrun,有道笔记等的感想
- 手机安装app总是显示未安装
- TypeScrpt 学习指南
- 【Scratch考级99图】图10-等级考试scratch 画正五边形
- 为何在数据库中将手机号设为int型却保存为2147483647
- 解决ubuntu下vi上下左右方向键出现字母,backspace键不能删除字符
- mysql 求中位数、四分位数
热门文章
- 程序技巧:人民币大写转换,身份证识别等 ,经典收集!
- 郑州工商学院计算机答辩,2021届本科毕业论文(设计)答辩工作圆满结束
- HDU-5927-Auxiliary Set(树上DP+xjb操作)
- 机器学习中的各种距离测量公式
- XR20M1170实现FPGA 的SPI/IIC转UART
- JWT攻击手册(附jwt_tool用法,爆破弱密钥等)
- Octave常用函数
- vue缺省页面处理,找不到页面处理
- 【数据结构】Singly-Linked-List 单链表(更新时间:2016-04-07)
- Eclipse新发布的Ganymede,转自,javaeye