上篇文章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相关推荐

  1. swift php json解析,Swift 4.0 | JSON数据的解析和编码

    文 / 菲拉兔 自己撸的图 要求: Platform: iOS8.0+ Language: Swift4.0 Editor: Xcode9 [问题补充2017-09-28] 最近我发现了一个问题:在S ...

  2. Swift - 使用原生库进行 JSON 解析和生成

    快速入门 JSON(JavaScript Object Notation)是应用在 JavaScript 语言上的数据格式,常用于网络数据交换和存储.Apple 在Foundation模块中集成了 J ...

  3. swift创建嵌套模型使用yy_model解析json

    依然是使用swift混编,因为现在的项目是oc项目,但是不想写太多oc代码,所以用swift创建模型.因为swift创建模型可以很方便的输入默认值代码量也少,这样在读取json的时候就不用担心,因为j ...

  4. 经典大数据面试题及解析

    经典大数据面试题及解析 1.下列哪个属性是hdfs-site.xml中的配置? A.dfs.replication B.fs.defaultFS C.mapreduce.framework.name ...

  5. Android网络之数据解析----SAX方式解析XML数据

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  6. Xml 格式数据的生成和解析

    相关阅读 XML约束 Xml 格式数据的生成和解析 XML解析器 什么是XML XML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记 ...

  7. 大数据 清华 覃征_2021年清华(清华大学)大数据工程考研难度解析、考研经验分享...

    [盛世清北] 2021年清华考研备考已经开始,由于很多学生苦于在清华考研备考过程中,不知道如何查找资料,如何把握重点,甚至不确定如何准确设定备考计划,对此,盛世清北整理了清华各专业等一些列专业考研干货 ...

  8. [转]关于数据中台、数据平台、数据仓库、数据湖等数据概念的对比解析

    前言 2010年左右,还是在上学的时候,学过一门课程叫<数据仓库与数据挖掘>,那还是属于传统数据的时代,我们会讨论什么是数据仓库?什么是数据集市?数据仓库和数据库有什么区别?等等,当我还在 ...

  9. mysql数据库迁徙_Mysql数据迁徙方法工具解析

    这篇文章主要介绍了mysql数据迁徙方法工具解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 数据迁徙是每个后端都会遇到的工作之一,本文介绍了一些 ...

最新文章

  1. document.forms用法
  2. 前端学习(3070):vue+element今日头条管理-删除文章400
  3. vue动态生成下拉框_解决vue动态下拉菜单 有数据未反应的问题
  4. Codeforces Round #327 div2
  5. C# 通过PostMessage完成UI的更新
  6. 2022秋招面经(C++软开)
  7. c语言24小时计时法转换为12小时,12时24时换算题(24小时和12小时换算方法)
  8. 计算机常用文献管理工具,工具丨5款常用的文献管理软件
  9. 基于ROS的机器人模型建立及3D仿真【物理/机械意义】
  10. 山东大学研究生计算机学院导师,山东大学计算机科学与技术学院研究生导师简介-杨义军...
  11. 计算机无法删除tf卡的内容,SD卡不能删除文件并且插电脑上无法格式化
  12. 单元测试利器 - Mock
  13. Bigemap支持百度地图
  14. 关于video++,jsrun,有道笔记等的感想
  15. 手机安装app总是显示未安装
  16. TypeScrpt 学习指南
  17. 【Scratch考级99图】图10-等级考试scratch 画正五边形
  18. 为何在数据库中将手机号设为int型却保存为2147483647
  19. 解决ubuntu下vi上下左右方向键出现字母,backspace键不能删除字符
  20. mysql 求中位数、四分位数

热门文章

  1. 程序技巧:人民币大写转换,身份证识别等 ,经典收集!
  2. 郑州工商学院计算机答辩,2021届本科毕业论文(设计)答辩工作圆满结束
  3. HDU-5927-Auxiliary Set(树上DP+xjb操作)
  4. 机器学习中的各种距离测量公式
  5. XR20M1170实现FPGA 的SPI/IIC转UART
  6. JWT攻击手册(附jwt_tool用法,爆破弱密钥等)
  7. Octave常用函数
  8. vue缺省页面处理,找不到页面处理
  9. 【数据结构】Singly-Linked-List 单链表(更新时间:2016-04-07)
  10. Eclipse新发布的Ganymede,转自,javaeye