使用编码键快速制作XML

时间:2018-06-26 18:20:52

标签: swift xml

我有很多型号。一个例子是

struct Person
{
  let id = Int
  let nameOfBoss = String
...
}
enum CodingKeys: String, CodingKey
{
  case id
  case nameOfBoss = "nam_of_boss"
...
}

我想制作XML。该Web服务读取类似(snake_case)的代码

...
<name_of_boss>Greg</name_of_boss>
...

如何使用encodingKeys rawValue(String)像上面那样制作XML?

(大多数Pod都没有取得成功-因此我现在避免使用它们。尽管设法使用SWXMLHash)

(我写了一些代码来创建对象镜像...但是不会使用rawValue。)

1 个答案:

答案 0 :(得分:1)

要在序列化过程中使用CodingKey,您可能想使用新的Codable协议,但是Foundation不支持XML。

Shawn Moore编写了一个interesting library,它从Foundation中添加了XMLDecoderXMLEncoder类中的缺失项。 (Codable支持XML)this answer虽然没有自述文件,但可以帮助您使用它。

另一种解决方案是尝试XMLMapper。该库使用与ObjectMapper相同的思想,但用于XML。

例如,您可以序列化以下模型结构:

struct Person: XMLMappable {
    var nodeName: String! = "Person"

    var id: String?
    var nameOfBoss: String?

    init() {

    }

    init(map: XMLMap) {

    }

    mutating func mapping(map: XMLMap) {
        id <- map["id"]
        nameOfBoss <- map["nam_of_boss"]
    }
}

对于以下XML:

<Person>
    <id>1</id>
    <nam_of_boss>Greg</nam_of_boss>
</Person>

使用toXMLString()协议的XMLMappable功能:

var person = Person()
person.nameOfBoss = "Greg"
person.id = "1"
let xmlString = person.toXMLString()

希望这会有所帮助。