我需要解析具有动态元素的XML消息,因此我使用了interface{}
类型的元素来在Message结构中表示它。
一旦知道了此动态元素的类型(在运行时),便会初始化消息结构,然后尝试解组XML消息。但是,动态元素的内容并未经过整理。
这是一个Go Playground,我正在尝试达到的目标,评论以及实际与预期的输出:https://play.golang.org/p/eKVetUPmVI2
我尝试了几种变体,但无法按预期工作。谁能帮助我了解为什么这种行为以及如何使其起作用?预先感谢。
答案 0 :(得分:1)
根据encoding/xml
软件包的文档:
如果XML元素包含与任何元素都不匹配的子元素 以上规则中的一个,并且该结构具有一个带有标签
",any"
的字段, unmarshal将子元素映射到该struct字段。
对代码进行一次小的更新即可使其按预期工作:
将xml:",any"
标签添加到您的Other
字段定义中。
要清理代码,我也将删除Any
类型,您不需要它。您可以将Other
字段定义更改为使用标签interface{}
输入xml:",any"
并完成相同的操作。
像这样:
Other interface{} `xml:",any"`
执行并查看捕获的“ 1000”。
我建议您更新问题以直接包含您的代码,以使人们更容易找到/搜索/阅读您的问题。拥有“前往游乐场”链接也很有用,因此读者可以快速运行/调整/测试示例。