0

我有以下 XML 结构(这是一个精简的示例):

<Root>
    <SomeData>Some value</SomeData>
    ...
    <ClientInfo>
        <Client>MD</Client>
        <Name>Massive Dynamic</Name>
    </ClientInfo>
</Root>

使用以下模型:

struct ClientInfo : XMLElementDeserializable {
    let Client : String
    let Name : String

    static func deserialize(_ node: XMLIndexer) throws -> ClientInfo {
        return try ClientInfo(
            Client: node["Client"].value(),
            Name: node["Name"].value()
        )
    }
}

我正在尝试按如下方式解析 XML:

let clientInfo : ClientInfo? = try? xml.children[0]["ClientInfo"].value()

但是,它一直失败并出现ImplementationIsMissing错误,就好像我的自定义deserialize函数不存在一样。

是什么赋予了?

4

1 回答 1

1

你快到了,只是一个小错误……XMLElementDeserializable你应该使用. 而不是XMLIndexerDeserializable.

以下在操场上对我有用:

import SWXMLHash

let xmlData = "<Root>" +
"<SomeData>Some value</SomeData>" +
"    <ClientInfo>" +
"       <Client>MD</Client>" +
"       <Name>Massive Dynamic</Name>" +
"   </ClientInfo>" +
"</Root>"

let xml = SWXMLHash.parse(xmlData)

struct ClientInfo : XMLIndexerDeserializable {
    let Client: String
    let Name: String

    static func deserialize(_ node: XMLIndexer) throws -> ClientInfo {
        return try ClientInfo(
            Client: node["Client"].value(),
            Name: node["Name"].value()
        )
    }
}

let info: ClientInfo? = try? xml.children[0]["ClientInfo"].value()

这两者之间的区别有点令人困惑,它肯定需要在库中进行改进。要点是XMLElementDeserializable针对没有子节点的独立类型(例如字符串、整数、日期等)。

于 2017-08-25T13:44:16.627 回答