SWXMLHash的反序列化错误

时间:2017-08-24 02:25:16

标签: swift swxmlhash

我有以下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错误而失败。

是什么给出了?

1 个答案:

答案 0 :(得分: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适用于没有子节点的独立类型(例如字符串,整数,日期等)。