Swift - 生成XML格式数据3(使用AEXML库)
作者:hangge | 2018-10-17 08:10
在之前的两篇文章中,我分别介绍了使用 XMLParsing 库和 XMLMapper 库来生成 XML 数据。但它们有个共同点,就是使用前必须先创建相关的模型。但有时我们只想生成一些简单的 XML 数据,这样就略显麻烦。
(2)运行结果如下:
(2)我们使用 AEXML 对其解析并输出内容:
(3)运行结果如下:
本文接着介绍另一个十分简单的 XML 库:AEXML。它不需要创建相关的模型,只需借助内置的 AEXMLDocument 对象,通过其 addChild() 方法插入节点内容和数据,即可生成一个 XML 字符串。
一、AEXML 库的安装与介绍
1,基本介绍
(1)AEXML 是一个使用简单,且十分轻量的 XML 操作库。
(2)AEXML 不仅可以用来生成 XML 字符串数据,还可以解析读取 XML 数据。
2,安装配置
(1)从 GitHub 上下载最新的代码:https://github.com/tadija/AEXML
(2)将下载下来的源码包中 AEXML.xcodeproj 拖拽至你的工程中
(3)工程 -> General -> Embedded Binaries 项,把 iOS 版的 framework 添加进来:AEXML.framework
(4)最后,在需要使用 AEXML 的地方 import 进来就可以了
import AEXML
二 、基本用法
1,一个生成 XML 数据的样例
(1)样例代码如下:
//创建XML文档数据 let soapRequest = AEXMLDocument() let root = soapRequest.addChild(name: "data") let catalog1 = root.addChild(name: "catalog") catalog1.addChild(name: "genre", value: "计算机") let books1 = catalog1.addChild(name: "books") let book1 = books1.addChild(name: "book", attributes: ["id": "101"]) book1.addChild(name: "title", value: "神经网络设计") book1.addChild(name: "price", value: "19.9") book1.addChild(name: "publishDate", value: "2018-09-11") let book2 = books1.addChild(name: "book", attributes: ["id": "102"]) book2.addChild(name: "title", value: "代码大全") book2.addChild(name: "price", value: "108.0") book2.addChild(name: "publishDate", value: "2006-06-20") let catalog2 = root.addChild(name: "catalog") catalog2.addChild(name: "genre", value: "科幻小说") let books2 = catalog1.addChild(name: "books") let book3 = books2.addChild(name: "book", attributes: ["id": "201"]) book3.addChild(name: "title", value: "三体") book3.addChild(name: "price", value: "70.0") book3.addChild(name: "publishDate", value: "2017-08-10") //输出XML字符串 print(soapRequest.xml)
(2)运行结果如下:
2,解析 XML 数据的样例
(1)假设我们有个 xml 数据文件(books.xml),内容如下:
<data> <catalog> <genre>计算机</genre> <books> <book id="101"> <title>神经网络设计</title> <price>19.9</price> <publishDate>2018-09-11</publishDate> </book> <book id="102"> <title>代码大全</title> <price>108.0</price> <publishDate>2006-06-20</publishDate> </book> </books> </catalog> <catalog> <genre>科幻小说</genre> <books> <book id="201"> <title>三体</title> <price>70.0</price> <publishDate>2017-08-10</publishDate> </book> </books> </catalog> </data>
(2)我们使用 AEXML 对其解析并输出内容:
//获取xml文件内容 guard let xmlPath = Bundle.main.path(forResource: "books", ofType: "xml"), let data = try? Data(contentsOf: URL(fileURLWithPath: xmlPath)) else { return } //解析xml文件内容 do { let xmlDoc = try AEXMLDocument(xml: data) //遍历输出各个节点数据 if let catalogs = xmlDoc.root["catalog"].all { for catalog in catalogs { if let genre = catalog["genre"].value { print("--- \(genre) ---") } for book in catalog["books"].children { if let id = book.attributes["id"], let title = book["title"].value, let publishDate = book["publishDate"].value { print(id, title, publishDate) } } } } } catch { print("\(error)") }
(3)运行结果如下:
全部评论(0)