在 Golang 中解组 XML 时如何在 interface 中获取数据?
Posted
技术标签:
【中文标题】在 Golang 中解组 XML 时如何在 interface 中获取数据?【英文标题】:how to get data in interface while unmarshaling an XML in Golang?在 Golang 中解组 XML 时如何在 interface 中获取数据? 【发布时间】:2014-05-14 12:08:28 【问题描述】:我正在尝试在 golang 中使用 interface 来编组和取消编组我的 xml。原因是在调用我的肥皂信封的肥皂服务器时,标题是相同的,但我想通过传递不同的结构来传递不同的肥皂函数。我在操场上做了一个示例代码(与肥皂无关)。我可以使用 interface 编组 xml,但无法解组。
这里是链接Play Ground
请告诉我我做错了什么?
【问题讨论】:
这真的很奇怪。我什至更改了您的代码以使用与 json 编码器相同的方法,其余代码是相同的 - 它工作得很好。你可以在这里看到我的版本 - 除了元帅/解组电话之外,它是相同的 play.golang.org/p/rX-lOz4toV @Not_a_Golfer 是的。你能建议我用其他方法吗?正如我在我的问题中解释的那样,我需要发送soap xml(WSDL)。我将在其中制作一个常见的肥皂信封结构并在其中制作一个接口,对于不同的 Web 服务,我将在发送和接收期间传递结构(元帅/解组) 这里有一个类似的答案,实际代码:***.com/a/12258671/1239701 从概念上讲,如果Msg
是interface
,我不确定xml
如何“知道”在其中放置Child
而不是其他类型——如果类型静态为*Child
(参见play.golang.org/p/ZoF5IumWwL)。这可能是Decode
/DecodeElement
必须出现的地方:他们可以查看 XML 并根据看到的标签类型确定要创建的内容。但同意将 XML 解码为事先不知道的类型结构会很棘手。
Not_a_Golfer 的 JSON 示例有效,因为 JSON 解码器在必须解码到接口时会选择 map[string]interface
等默认类型。 xml 解码器的规则...棘手:golang.org/pkg/encoding/xml/#Unmarshal
【参考方案1】:
您无法解组到空接口,因为空接口没有任何导出字段可将 xml 键/值映射到。如果您想共享相同的代码以“动态地”以不同方式处理消息,则应将其存储在字符串或字节数组中(在这种情况下建议使用字节数组)。然后,您根据需要处理数据。
http://play.golang.org/p/sPq0ZfAcU7
【讨论】:
以上是关于在 Golang 中解组 XML 时如何在 interface 中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
在 java-8“安全处理 org.xml.sax.SAXNotRecognizedException 导致 java.lang.IllegalStateException”中解组 xml 时出错