【发布时间】:2014-07-22 01:30:57
【问题描述】:
我的行为不正确(或者我做错了什么)。 golang XML demarshalling 似乎无法处理本地名称冲突的特定情况。 也就是说,一个元素有 2 个子元素,两个子元素都具有相同的本地名称(“book”),但一个没有命名空间(或默认或空),另一个具有显式命名空间。
对于(一个人为的)示例:
<library
xmlns:lib="http://foobar.com/ns/library">
<lib:book>
AAA
</lib:book>
<book>
ZZZ
</book>
<library>
如果我使用以下结构来表示:
type Library_Type struct {
Book string `xml:"book,omitempty" json:",omitempty"`
Book_lib string `xml:"http://foobar.com/ns/library book,omitempty" json:",omitempty"`
Lib string `xml:"xmlns lib,attr"`
}
并尝试解组,根本不起作用:来源:http://play.golang.org/p/YW2XpTVRs5
输出:
{"Lib":""}
{"Lib":""}
但是,如果我在结构中注释掉“书串”:http://play.golang.org/p/BRv6tUNreM
输出:
{"Book_lib":"\n AAA\n ","Lib":"http://foobar.com/ns/library"}
如果我注释掉“Book_lib”...:http://play.golang.org/p/u_Up9X9YMp
输出:
{"Book":"\n ZZZ\n ","Lib":"http://foobar.com/ns/library"}
如果我在“书”前面添加一个空格: 来自:
Book string `xml:"book,omitempty" json:",omitempty"`
收件人:
Book string `xml:" book,omitempty" json:",omitempty"`
但是,添加2个空格(可以解释为第一个空格为命名空间,第二个空格为空格分隔;当没有命名空间时,调用xml.StartElement.Name.Space等于“”):
收件人:
Book string `xml:" book,omitempty" json:",omitempty"`
http://play.golang.org/p/Br_WBR3U8K
输出:
{"Book_lib":"\n AAA\n ","Lib":"http://foobar.com/ns/library"}
如果我有两个显式名称空间,问题就会消失(输出是预期的输出):http://play.golang.org/p/llpMuC0SV8
输出:
{"Book_bin":"\n ZZZ\n ","Book_lib":"\n AAA\n ","Lib":"http://foobar.com/ns/library","Bin":"http://foobar.com/ns/bin"}
因此,除非我在这里做错了什么,否则 XML 混合了默认(空)命名空间和具有本地名称冲突的显式命名空间的用例似乎不起作用,这是一个错误。
但如果你能找到解决这个问题的方法,我将不胜感激。
【问题讨论】:
标签: xml namespaces go