我有以下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
错误而失败。
是什么给出了?
答案 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
适用于没有子节点的独立类型(例如字符串,整数,日期等)。