Go中具有动态类型(空接口)的XML Unmarshal

时间:2018-07-20 22:08:40

标签: go

我需要解析具有动态元素的XML消息,因此我使用了interface{}类型的元素来在Message结构中表示它。

一旦知道了此动态元素的类型(在运行时),便会初始化消息结构,然后尝试解组XML消息。但是,动态元素的内容并未经过整理。

这是一个Go Playground,我正在尝试达到的目标,评论以及实际与预期的输出:https://play.golang.org/p/eKVetUPmVI2

我尝试了几种变体,但无法按预期工作。谁能帮助我了解为什么这种行为以及如何使其起作用?预先感谢。

1 个答案:

答案 0 :(得分:1)

根据encoding/xml软件包的文档:

  

如果XML元素包含与任何元素都不匹配的子元素   以上规则中的一个,并且该结构具有一个带有标签",any"的字段,   unmarshal将子元素映射到该struct字段。

对代码进行一次小的更新即可使其按预期工作:

xml:",any"标签添加到您的Other字段定义中。

要清理代码,我也将删除Any类型,您不需要它。您可以将Other字段定义更改为使用标签interface{}输入xml:",any"并完成相同的操作。

像这样:

Other interface{} `xml:",any"`

执行并查看捕获的“ 1000”。

我建议您更新问题以直接包含您的代码,以使人们更容易找到/搜索/阅读您的问题。拥有“前往游乐场”链接也很有用,因此读者可以快速运行/调整/测试示例。