我正在尝试使用encoding/xml包在Go中编码和解码XML令牌。 所讨论的XML令牌具有名称空间,xmlns属性以及标记上名称空间的名称空间声明(此处的示例是XMPP流起始元素)。 它是XMPP流的根元素:

(忽略处理指令;我只是留下来说明这是根元素)

我希望能够从结构中读取/写入此令牌,因此我将其作为xml.StartElementdecoder.Token()一起获取,然后将所有属性手动复制到该结构中。 然后,我用encoder.Encode(thestruct)将其写出,但总是得到有趣的结果(xmlns是错误的,即使XMLName是正确的,开始标记也永远不会是stream:stream)。

应该如何修改此结构以能够与上述XML之间进行编码和解码?


您得到正确的结果,因为:

是相同的

Jabber的XML非常复杂,因此如果不想以正确的XMPP XML结尾,则可能需要编写自己的编码器。

顺便说一下,如果您查看Golang XMPP实现,您会发现它们都使用自己的编码(通常是解码)。