返回 导航

Swift

hangge.com

Swift - 生成XML格式数据3(使用AEXML库)

作者:hangge | 2018-10-17 08:10
    在之前的两篇文章中,我分别介绍了使用 XMLParsing 库和 XMLMapper 库来生成 XML 数据。但它们有个共同点,就是使用前必须先创建相关的模型。但有时我们只想生成一些简单的 XML 数据,这样就略显麻烦。
  
    本文接着介绍另一个十分简单的 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)

回到顶部