PugiSwift 是一个围绕 C++ 库 pugixml 的 Swift 封装。其目标是在 Apple 平台和使用 Vapor 的服务器上,提供一种使用 Swift 快速解析 XML 的方法。
当前捆绑的 pugixml 版本是 1.14。
pugixml 使用 MIT 许可证授权,可以在这里找到副本。
PugiSwift 已经与其他流行的 Swift 包进行了基准测试。此基准测试的代码可在此仓库中找到。测试是在 Release 模式下进行的,并且关闭了调试器。与 Fuzi 和 XMLCoder 进行了比较。
xychart-beta
title "Parses per second of 212kb file"
x-axis "Programs" ["PugiSwift", "Fuzi", "XMLCoder"]
bar [757, 207, 54]
import Foundation
import PugiSwift
@Node struct Records {
@Attribute let value: String
@Element(childrenCodingKey: "record") let records: [Record]
}
@Node struct Record {
let name: String
let list: Int
}
let str =
"""
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<records value="Hello World">
<record>
<name>Paul Koch</name>
<list>17</list>
</record>
</records>
"""
do {
let records = try Records(from: str)
print(records)
} catch {
print("Error: \(error.localizedDescription)")
}