我正在尝试使用KissXML(https://github.com/robbiehanson/KissXML.git)为iOS构建XML文档。
据说这是Apple的NSXML类集群的直接替代品,仅在Mac上可用,而在iOS上不可用。据说这是NSXML for iOS的几乎完整且强大的实现。
我的Xcode项目中安装了KissXML。我认为正确,因为在import KissXML
之后我可以print(KissXMLVersionNumber)
并获得1.0.
但是,请尽我所能,不能从头开始创建XML文档。我不确定如何理解“直接替换”。例如,Apple的NSXMLDocument
具有setRootElement()
方法,而KissXML中的XMLDocument
没有。也许我缺少明显的东西。谁能提供一个简单的示例说明如何进行?我尝试为实践构建的xml表达式是:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg>
<svg width="220px" height="120px" xmlns="http://www.w3.org/2000/svg">
<g>
<text font-size="32" x="25" y="60">
Hello, World!
</text>
</g>
</svg>
我正在使用Xcode 10.1,Swift 4.2。
我期望的示例应该可以工作,但不能:
首先,为MacOS的Cocoa应用程序编写代码。这使用本机的NSXMLDocument类(正如XCode告诉我的那样,现在已重命名为XMLDocument;我无法在代码中使用NSXMLDocument)。这是ViewController类的完整代码:
import Cocoa
class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
let xmlElement = XMLElement(name: "name", stringValue: "value")
let xmlDoc = XMLDocument(rootElement: xmlElement)
print("\(xmlDoc.stringValue!)")
}
}
如预期的那样,该程序的输出为“值”。
现在,针对iOS的单视图应用程序使用相同的程序,并使用KissXML作为替代品:
import UIKit
import KissXML
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let xmlElement = XMLElement(name: "name", stringValue: "value")
let xmlDoc = XMLDocument(rootElement: xmlElement)
print("\(xmlDoc.stringValue!)")
}
}
该程序将无法编译。在定义xmlDoc的第8行,XCode告诉我
Cannot invoke initializer for type 'XMLDocument' with an argument list of type '(rootElement: XMLElement)'
。(用于XMLDocument的Inspector告诉我
typealias XMLDocument = DDXMLDocument
,这反过来又使我进入了KissXML框架以定义其定义。因此,它的确是一个KissXML类。在MacOS的情况下,它只说了class XMLDocument : XMLNode
,它指向Foundation内部/ NSXMLDocument。)为了确保正确安装KissXML,我运行了以下程序:
import UIKit
import KissXML
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("\(KissXMLVersionNumber)")
}
}
该程序运行,并输出“ 1.0”。
最佳答案
我得出的结论是,由于自开发KissXML以来NSXML的发展,KissXML不再是NSXML的直接替代。
必须有一种方法来实现我想要的功能,但是由于唯一的文档是对NSXML的引用,因此没有明显的用途。
我转向AEXML,它非常满足我的需求。
关于ios - 使用Swift和KissXML创建XML:例如?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54054191/