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)