golang解析xml namespace prefix的bug

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中即可,十分麻烦哎.

相关文章

什么是Go的接口? 接口可以说是一种类型,可以粗略的理解为他...
1、Golang指针 在介绍Golang指针隐式间接引用前,先简单说下...
1、概述 1.1&#160;Protocol buffers定义 Protocol buffe...
判断文件是否存在,需要用到"os"包中的两个函数: os.Stat(...
1、编译环境 OS :Loongnix-Server Linux release 8.3 CPU指...
1、概述 Golang是一种强类型语言,虽然在代码中经常看到i:=1...