[Swift通天遁地]七、数据与安全-(2)对XML和HTML文档的快速解析
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10300747.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
目录:[Swift]通天遁地Swift
本文将演示使用Fuzi(斧子)类库实现对XML和HTML文档的快速解析。
首先确保在项目中已经安装了所需的第三方库。
点击【Podfile】,查看安装配置文件。
1 platform :ios, '12.0' 2 use_frameworks! 3 4 target 'DemoApp' do 5 source 'https://github.com/CocoaPods/Specs.git' 6 pod 'Fuzi' 7 end
根据配置文件中的相关配置,安装第三方库。
然后点击打开【DemoApp.xcworkspace】项目文件。
在项目导航区,打开视图控制器的代码文件【ViewController.swift】
1 import UIKit 2 //引入已经安装的第三方类库 3 import Fuzi 4 5 class ViewController: UIViewController { 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 // Do any additional setup after loading the view, typically from a nib. 10 //实现对XML文档的解析 11 parseXML() 12 //实现对HTML文档的解析 13 parseHTML() 14 } 15 16 //添加一个方法,实现对XML文档的解析 17 func parseXML() 18 { 19 //从项目中读取指定文件名称的待解析的文档。 20 let fileUrl = URL(fileURLWithPath: ((#file as NSString).deletingLastPathComponent as NSString).appendingPathComponent("nutrition.xml")) 21 //添加一个异常捕捉语句,用来处理对XML文档的解析操作。 22 do 23 { 24 //读取待解析的文档,并存储在一个数据常量中。 25 let data = try Data(contentsOf: fileUrl) 26 //将加载的数据转换成文档对象。 27 let document = try XMLDocument(data: data) 28 29 //获得文档对象的根节点,并在控制台输出根节点的标签的值。 30 if let root = document.root 31 { 32 //输出日志信息 33 print("Root Element: \(String(describing: root.tag))") 34 35 print("\nDaily values:") 36 //获得根节点中指定标签的节点, 37 //然后获得该节点下的所有子节点, 38 //并对子节点进行遍历。 39 for element in root.firstChild(tag: "daily-values")?.children ?? [] 40 { 41 //获得节点标签的名称 42 let nutrient = element.tag 43 //获得节点的值 44 let amount = element.numberValue 45 //获得节点属性的值 46 let unit = element["units"] 47 //在控制台输出节点各元素的值 48 print("- \(amount!)\(unit!) \(nutrient!)") 49 } 50 //输出一个换行符 51 print("\n") 52 53 //通过X路径格式,获得指定的节点。 54 //这里获得食物节点下的名称子节点。 55 var xpath = "//food/name" 56 //在控制台输出该节点。 57 print("XPath Search: \(xpath)") 58 59 //遍历所有的名称节点 60 for element in document.xpath(xpath) 61 { 62 //并在控制台输出食物的名称 63 print("\(element)") 64 } 65 //输出另一个换行符 66 print("\n") 67 68 //还可以通过和CSS相似的方法,来查找指定的节点。 69 //这里获得食物节点下的指定的子节点。 70 let css = "food > serving[units]" 71 //初始化一个文档元素 72 var blockElement:XMLElement? = nil 73 //在控制台输出搜索路径 74 print("CSS Search: \(css)") 75 76 //对指定路径下的节点进行遍历 77 for (index, element) in document.css(css).enumerated() 78 { 79 //当循环的索引为数字1时, 80 if index == 1 81 { 82 //获得遍历的节点。 83 blockElement = element 84 break 85 } 86 } 87 //然后在控制台输出第二个节点。 88 print("Second element: \(blockElement!)\n") 89 90 //在控制台输出食物节点下的,名称子节点的X路径。 91 xpath = "//food/name" 92 print("XPath Search: \(xpath)") 93 94 //获得文档中的指定路径的第一个节点, 95 //在控制台输出该节点的内容。 96 let firstElement = document.firstChild(xpath: xpath)! 97 print("First element: \(firstElement)") 98 } 99 } 100 catch 101 { 102 print("Something went wrong :(") 103 } 104 } 105 106 //添加一个方法,实现对HTML文档的解析 107 func parseHTML() 108 { 109 //从项目中读取指定的网页文件 110 let fileUrl = URL(fileURLWithPath: ((#file as NSString).deletingLastPathComponent as NSString).appendingPathComponent("index.html")) 111 //添加一个异常捕捉语句,用来处理对HTML文档的解析操作。 112 do 113 { 114 //获得指定位置的网页文件,将文件存储在数据对象中。 115 let data = try Data(contentsOf: fileUrl) 116 //将网页数据转换成文档对象。 117 let doc = try HTMLDocument(data: data) 118 119 //获得文档对象中的第一个指定的节点, 120 if let elementById = doc.firstChild(css: "#copyright") 121 { 122 //并在控制台输出该节点的内容。 123 print(elementById.stringValue) 124 } 125 126 //获得文档对象中的所有链接节点, 127 //并对链接节点进行遍历 128 for link in doc.css("a, link") 129 { 130 //在控制台输出链接的路径 131 print(link.rawXML) 132 print(link["href"] as Any) 133 } 134 135 //获得主体节点下的所有链接节点, 136 if let firstAnchor = doc.firstChild(xpath: "//body/a") 137 { 138 //并输出第一个网络链接。 139 print(firstAnchor["href"] as Any) 140 } 141 142 //获得头结点下的所有脚本节点, 143 for script in doc.xpath("//head/script") 144 { 145 //并输出脚本节点的文档路径 146 print(script["src"] ?? "") 147 } 148 149 //获得主体节点下的所有链接节点, 150 if let result = doc.eval(xpath: "count(//body/a)") 151 { 152 //并在控制台输出该数量 153 print("anchor count : \(result.doubleValue)") 154 } 155 156 //输出标题 157 print(doc.title as Any) 158 //输出头节点 159 print(doc.head as Any) 160 //输出主题节点 161 print(doc.body as Any) 162 } 163 catch 164 { 165 print("Something went wrong :(") 166 } 167 } 168 169 override func didReceiveMemoryWarning() { 170 super.didReceiveMemoryWarning() 171 // Dispose of any resources that can be recreated. 172 } 173 }
转载于:https://www.cnblogs.com/strengthen/p/10300747.html
[Swift通天遁地]七、数据与安全-(2)对XML和HTML文档的快速解析相关推荐
- [Swift通天遁地]七、数据与安全-(1)XML文档的创建和解析
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- [Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- [Swift通天遁地]七、数据与安全-(12)使用Instruments Leaks工具检测内存泄露
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- [Swift通天遁地]七、数据与安全-(6)管理文件夹和创建并操作文件
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- [Swift通天遁地]五、高级扩展-(4)快速生成Invert、Mix、Tint、Shade颜色及调整饱和度阶...
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- [Swift通天遁地]三、手势与图表-(10)创建包含圆点、方形、三角形图标的散点图表...
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- [Swift通天遁地]二、表格表单-(11)创建星期选项表单和拥有浮动标签的文本框
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- [Swift通天遁地]一、超级工具-(16)使用JTAppleCalendar制作美观的日历
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
- [Swift通天遁地]八、媒体与动画-(13)CoreText框架实现图文混排
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...
最新文章
- 一次图文并茂的***完整测试二
- 12 个的优秀手机设计灵感
- linux 信号 sigaction(是signal的扩展,在多线程应用中替代了signal)(除了信号值信息外,还可以附加数值信息(以及指针:不可跨进程):sigqueue()函数)
- foreman架构的引入2-安装前环境准备
- python 博弈论 社会网络_【 统计应用 】 社会网络分析SNA报告-学习
- 关于双网卡电脑无法加入域或失去与域的联系的方法
- 图像处理一:形态学膨胀和腐蚀
- js 原生拖拽,返回到原点
- nmap命令的安装及用法
- Win10 新机,这些必装软件你拥有了吗?
- ffmpeg 源代码简单分析 :av_read_frame()
- 【dell电脑Windows10重启自动修复】重启之后一直修复,又重启(已解决)
- python保存快捷键是什么_python常用快捷键
- 国庆日快到啦!国庆版头像来了!总有一款适合你!
- 无人值守u盘安装linux,U盘无人值守安装Linux操作系统
- matlab—赋值具有的非单一 rhs 维度多于非单一下标数
- ubuntu20.04基础入门日记V1.0
- 基于SSH的婴幼儿产品销售系统的开发与设计毕业设计论文
- Leetcode_49_Anagrams
- Quartz使用详解!