https://github.com/golang/go/issues/11496
示例使用链接中的示例, 我遇到的问题跟这个一样
<person xmlns:ns="ns">
<ns:name>Oliver</ns:name>
<ns:phone>110</ns:phone>
</person>
解析结构体定义如下
type Person struct {
XMLName xml.Name `xml:"ns person"`
Name string `xml:"ns name"`
Phone string `xml:"ns phone"`
}
Marshal后结果如下
<person xmlns="ns">
<name xmlns="ns">Oliver</name>
<phone xmlns="ns">110</phone>
</person>
以上是golang的一个bug, 最新1.9仍然会出现, 目前解决办法UnMarshal和Marshal的结构体不能一致.
UnMarshal
type Person struct {
XMLName xml.Name `xml:"person"`
Name string `xml:"name"`
Phone string `xml:"phone"`
}
Marshal
type Person2 struct {
XMLName xml.Name `xml:"ns:person"`
NS string `xml:"xmlns:ns,attr"`
Name string `xml:"ns:name"`
Phone string `xml:"ns:phone"`
}
NS变量在调用Marshal前赋值, 然后把Person的数据拷贝到Person2中即可, 十分麻烦哎.