★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10297037.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

目录:[Swift]通天遁地Swift

本文将演示可扩展标记语言文档的解析和编写。

首先确保在项目中已经安装了所需的第三方库。

点击【Podfile】,查看安装配置文件。

1 platform :ios, '12.0'
2 use_frameworks!
3
4 target 'DemoApp' do
5     source 'https://github.com/CocoaPods/Specs.git'
6     pod 'AEXML'
7 end

根据配置文件中的相关配置,安装第三方库。

然后点击打开【DemoApp.xcworkspace】项目文件。

在项目导航区,打开视图控制器的代码文件【ViewController.swift】

  1 import UIKit
  2 //引入已经安装的第三方类库
  3 import AEXML
  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         //读取和解析文档
 11         readXML()
 12         //编写XML文档
 13         writeXML()
 14     }
 15
 16     //添加一个方法,用来读取和解析文档
 17     func readXML()
 18     {
 19         //读取项目中的待解析的文档
 20         guard let xmlPath = Bundle.main.path(forResource: "XMLExample", ofType: "xml"),
 21             let data = try? Data(contentsOf: URL(fileURLWithPath: xmlPath)) else {
 22             return
 23         }
 24
 25         //添加一个异常捕捉语句,用来实现对文档的解析
 26         do
 27         {
 28             //初始化一个文档对象,使用该文档对象,存储和加载数据。
 29             let xmlDoc = try AEXMLDocument(xml: data, options: AEXMLOptions())
 30             print(xmlDoc.xml)
 31
 32             print("-----------------------------")
 33             //通过一个循环语句,遍历根节点中的所有子节点。
 34             for child in xmlDoc.root.children
 35             {
 36                 //并在控制台输出子节点的名称
 37                 print("child.name:\(child.name)")
 38             }
 39
 40             print("-----------------------------")
 41             //从根节点中获得cats子节点,
 42             //然后再获得该节点中的cat子节点,
 43             //接着输出该节点的值。
 44             print(xmlDoc.root["cats"]["cat"].value as Any)
 45             //获得并初始节点的详细内容
 46             print(xmlDoc.root["cats"]["cat"].string)
 47             //从根节点中获得dogs子节点,
 48             //然后再获得该节点中的dog子节点,
 49             //接着输出该节点的值。
 50             print(xmlDoc.root["dogs"]["dog"].last?.value as Any)
 51             //获得该节点中的第三个节点,并输出该节点的详细内容。
 52             print(xmlDoc.root["dogs"].children[2].string)
 53
 54             print("--------------all---------------")
 55             //获得cats节点下的所有指定的子节点,并存储在一个数组中。
 56             if let cats = xmlDoc.root["cats"]["cat"].all
 57             {
 58                 //对由子节点组成的数组进行遍历
 59                 for cat in cats
 60                 {
 61                     //然后输出遍历到的元素的值
 62                     if let name = cat.value
 63                     {
 64                         print(name)
 65                     }
 66                 }
 67             }
 68
 69             //过滤cats节点下的所有指定的子节点
 70             print("---------------withValue--------------")
 71             //并获得拥有特定值的cat节点
 72             if let cats = xmlDoc.root["cats"]["cat"].all(withValue: "Tinna")
 73             {
 74                 //对由子节点组成的数组进行遍历
 75                 for cat in cats
 76                 {
 77                     //并输出节点的详细内容
 78                     print(cat.string)
 79                 }
 80             }
 81
 82             print("-------------withAttributes----------------")
 83             //过滤cats节点下的所有指定的子节点,并获得拥有特定属性的子节点。
 84             if let cats = xmlDoc.root["cats"]["cat"].all(withAttributes: ["breed" : "Domestic", "color" : "yellow"])
 85             {
 86                 //对由子节点组成的数组进行遍历,
 87                 for cat in cats
 88                 {
 89                     //并输出节点的详细内容
 90                     print(cat.string)
 91                 }
 92             }
 93
 94             print("--------------attributes---------------")
 95             //对dogs节点下的所有子节点,进行遍历操作。
 96             for dog in xmlDoc.root["dogs"]["dog"].all!
 97             {
 98                 //获得该节点的颜色属性
 99                 if let color = dog.attributes["color"]
100                 {
101                     //如果颜色属性的值为白色
102                     if color == "white"
103                     {
104                         //则输出当前颜色的详细内容
105                         print(dog.string)
106                     }
107                 }
108             }
109
110             print("-----------------------------")
111             //通过count属性,可以获得同名节点的数量。
112             print(xmlDoc.root["cats"]["cat"].count)
113             //并输出指定节点的品牌属性
114             print(xmlDoc.root["cats"]["cat"].attributes["breed"]!)
115             //获得并输出指定节点的标签内容,
116             //该内容中的回车符和将被去除
117             print(xmlDoc.root["cats"]["cat"].xmlCompact)
118         }
119         catch
120         {
121             //输出错误信息
122             print("\(error)")
123         }
124     }
125
126     //添加一个方法,用来编写XML文档
127     func writeXML()
128     {
129         //初始化一个文档对象
130         let soapRequest = AEXMLDocument()
131         //创建一个字典对象,作为文档的命名空间
132         let attributes = ["xmlns:xsi" : "http://www.w3.org/2001/XMLSchema-instance",
133                           "xmlns:xsd" : "http://www.w3.org/2001/XMLSchema"]
134
135         //往文档中添加一个指定名称和属性的节点
136         let envelope = soapRequest.addChild(name: "soap:Envelope", attributes: attributes)
137         //继续往该节点添加一个名为"Employees"的节点
138         let employees = envelope.addChild(name: "Employees")
139         //往"Employees"子节点添加一个名为"Managers"的节点
140         let managers = employees.addChild(name: "Managers")
141         //往"Managers"节点添加一个指定名称和年龄等属性的子节点
142         managers.addChild(name: "Manager", attributes:["Name":"Jerry", "age":"40"])
143         //往"Managers"节点添加一个指定名称和年龄等属性的子节点
144         managers.addChild(name: "Manager", attributes:["Name":"Peter", "age":"44"])
145
146         //往"Employees"子节点添加一个名为"Engineers"的节点
147         let engineers = employees.addChild(name: "Engineers")
148         //往"Engineers"节点添加一个指定名称和年龄等属性的子节点
149         engineers.addChild(name: "Engineer", attributes:["Name":"Bill", "age":"29"])
150         engineers.addChild(name: "Engineer", attributes:["Name":"Somus", "age":"31"])
151
152         print(soapRequest.xml)
153     }
154
155     override func didReceiveMemoryWarning() {
156         super.didReceiveMemoryWarning()
157         // Dispose of any resources that can be recreated.
158     }
159 }

转载于:https://www.cnblogs.com/strengthen/p/10297037.html

[Swift通天遁地]七、数据与安全-(1)XML文档的创建和解析相关推荐

  1. [Swift通天遁地]七、数据与安全-(19)使用Swift实现原生的SHA1加密

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. [Swift通天遁地]七、数据与安全-(2)对XML和HTML文档的快速解析

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  3. [Swift通天遁地]七、数据与安全-(12)使用Instruments Leaks工具检测内存泄露

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. [Swift通天遁地]七、数据与安全-(6)管理文件夹和创建并操作文件

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  5. Java案例:数据表转换成XML文档

    将数据表查询内容转换成XML文件,便于在网络上进行传输,具有一定的实用价值.   1.数据表(student) 2.数据库连接管理类 /*** 功能:获得数据库连接* 作者:华卫* 日期:2010年4 ...

  6. [Swift通天遁地]五、高级扩展-(4)快速生成Invert、Mix、Tint、Shade颜色及调整饱和度阶...

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  7. [Swift通天遁地]三、手势与图表-(10)创建包含圆点、方形、三角形图标的散点图表...

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  8. [Swift通天遁地]二、表格表单-(11)创建星期选项表单和拥有浮动标签的文本框

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  9. [Swift通天遁地]一、超级工具-(16)使用JTAppleCalendar制作美观的日历

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

最新文章

  1. 【知乎热议】没有顶会的CV/NLP方向的博士生毕业出路在哪里?
  2. 列表渲染 wx:key 的作用、条件渲染 wx:if 与 hidden 的区别
  3. java vo转map_JAVA Map转换为Bean或VO
  4. python学习实例(5)
  5. html判断坐标,js判断鼠标位置是否在某个div中的方法
  6. 计算机 教育 研究生分数查询,专业硕士在考试结束之后几周内可以去查分呢现在只能是通过电脑来查分了吗...
  7. 如何在验证集加噪声_图像去噪:如何去其糟粕,取其精华?
  8. elf文件格式_Android so(ELF) 文件解析
  9. 性能测试--jmeter中的察看结果树【7】
  10. 最新Axure谷歌浏览器Chrome扩展程序安装方法
  11. 【Vue项目实践】实现在线预览word文件、excel文件
  12. matlab实习维纳滤波,自编Matlab程序,维纳滤波器的Matlab实现
  13. K均值(K-Means)聚类算法简介
  14. matplotlib画图去掉边缘空白
  15. 电脑自带的edge浏览器无法访问解决问题
  16. android 蓝牙耳机 找不到驱动程序,bluetooth外围设备找不到驱动程序现象的解决方法介绍...
  17. 山寨版Google识图
  18. drupal建站案例_10分钟利用Drupal快速搭建网站
  19. k-nearest neighbor,k近邻法
  20. 富甲天下3绝对完美版

热门文章

  1. python画图-python画图汇总(持续更新)
  2. python编写爬虫的步骤-python学习: 写网络爬虫程序的三个难点
  3. python代码案例详解-Python实现电视里的5毛特效实例代码详解
  4. python入门到精通需要学多久-Python零基础入门到精通:一个月就够了
  5. python下载了怎么打开-下载python后如何启动
  6. python xpath语法-Python爬虫——bs4、xpath基本语法
  7. python 爬虫源代码-从零开始学Python网络爬虫_源代码.rar
  8. python制作excel表格-手把手教你用Python处理Excel表格
  9. python官网下载步骤linux-linux 安装 python 最全教程
  10. python处理excel字典-python从excel创建字典