首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Swift和KissXML创建XML :示例?

使用Swift和KissXML创建XML :示例?
EN

Stack Overflow用户
提问于 2019-01-06 01:02:39
回答 1查看 646关注 0票数 0

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

据推测,这是苹果公司的NSXML class cluster的临时替代品,后者只在Mac上可用,在iOS上不可用。据说它是用于iOS的几乎完整且健壮的NSXML实现。

我在我的Xcode项目中安装了KissXML。我的想法是正确的,因为在import KissXML之后,我可以print(KissXMLVersionNumber)并获得1.0.

但是,尽管我可能会尝试,我还是不能从头开始创建XML文档。我不确定如何理解“即插即用的替换”。例如,苹果的NSXMLDocument有一个setRootElement()方法,但KissXML的XMLDocument没有。也许我漏掉了显而易见的东西。有谁能提供一个简单的例子来说明如何去做呢?我尝试构建的用于练习的xml表达式是:

代码语言:javascript
复制
<?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类(现在重命名为XMLDocument,正如XCode告诉我的那样;我不能在代码中使用NSXMLDocument )。这是一个ViewController类的完整代码:

代码语言:javascript
复制
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!)")
    }
}

正如预期的那样,该程序的输出是"value“。

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

代码语言:javascript
复制
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的例子中,它只是简单地说class XMLDocument : XMLNode,它指向基础/NSXMLDocument内部。)

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

代码语言:javascript
复制
import UIKit
import KissXML
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        print("\(KissXMLVersionNumber)")
    }
}

此程序运行,并输出"1.0“。

EN

回答 1

Stack Overflow用户

发布于 2019-01-07 12:38:03

我得出的结论是,由于自KissXML开发以来NSXML的发展,KissXML不再是NSXML的临时替代品。必须有一种方法来实现我想要的东西,但是因为唯一的文档是对NSXML的引用,所以它没有明显的用处。我求助于AEXML,它很好地满足了我的需求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54054191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档