使用Swift和KissXML创建XML:例如?

时间:2019-01-05 17:02:39

标签: ios swift xml

我正在尝试使用KissXML(https://github.com/robbiehanson/KissXML.git)为iOS构建XML文档。

据说这是Apple的NSXML类集群的直接替代品,仅在Mac上可用,而在iOS上不可用。据说这是用于iOS的NSXML的几乎完整且强大的实现。

我在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!)")
    }
}

该程序的输出符合预期。

现在,使用KissXML作为嵌入式替代品,为iOS的单视图应用程序提供相同的程序:

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的检查员告诉我typealias XMLDocument = DDXMLDocument,这反过来又使我进入了KissXML框架以了解其定义。因此,它的确是一个KissXML类。在MacOS情况下,它只是说{{1 }},指向Foundation / NSXMLDocument内部。)

为确保正确安装KissXML,我运行了以下程序:

class XMLDocument : XMLNode

该程序运行,并输出“ 1.0”。

1 个答案:

答案 0 :(得分:0)

我得出的结论是,由于自开发KissXML以来NSXML的发展,KissXML不再是NSXML的直接替代品。 必须有一种方法来实现我想要的功能,但是由于唯一的文档是对NSXML的引用,因此没有明显的用途。 我转向AEXML,它非常满足我的需求。