我正在尝试使用encoding/xml
包对Go中的XML令牌进行编码和解码。有问题的XML令牌具有命名空间,xmlns
属性和标记上命名空间的命名空间声明(此处的示例是XMPP流启动元素)。它是XMPP流的根元素:
<?xml version="1.0" encoding="UTF-8"?>
<stream:stream
from='juliet@im.example.com'
to='im.example.com'
version='1.0'
xml:lang='en'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'>
(忽略处理指令;我只是留下来说明这是根元素)
我希望能够从结构中读取/写入此标记,因此我将其作为带有xml.StartElement
的{{1}}获取,并手动将所有属性复制到结构中。然后我用decoder.Token()
写出来,但总是得到有趣的结果(xmlns是错的,即使encoder.Encode(thestruct)
是正确的,开始标记也不是stream:stream
。
如何修改此结构以便能够对上述XML之类的内容进行编码和解码?
XMLName
答案 0 :(得分:1)
您得到了正确的结果,因为:
<stream:stream
xmlns:stream='http://etherx.jabber.org/streams' />
与
相同<stream xmlns='http://etherx.jabber.org/streams' />
Jabber的XML非常复杂,所以如果你不想得到正确的XMPP XML,你可能需要编写自己的编码器。
顺便说一句,如果你看看Golang XMPP实现,你会发现它们都使用自己的编码(通常是解码)。