如何使用go语言中的encoding / xml包获取xml属性值

时间:2016-06-11 16:14:01

标签: go

我需要将以下xml转换为struct。

https://play.golang.org/p/tboi-mp06k

var data = `<Message xmlns="http://www.ncpdp.org/schema/SCRIPT"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     release="006"
     version="010">`

type Message struct {
   XMLName  xml.Name `xml:http://www.ncpdp.org/schema/SCRIPT "Message"`
   release string `xml:"release,attr"`
   version string `xml:"version,attr"`
}

func main() {

    msg := Message{}
    _ = xml.Unmarshal([]byte(data), &msg)   

   fmt.Printf("%#v\n", msg)

}

程序输出以下内容: main.Message {XMLName:xml.Name {Space:“http://www.ncpdp.org/schema/SCRIPT”,Local:“Message”},release:“”,version:“”} 发布和版本都是空的。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

将结构更改为:

type Message struct {
   XMLName  xml.Name `xml:http://www.ncpdp.org/schema/SCRIPT "Message"`
   Release string `xml:"release,attr"`
   Version string `xml:"version,attr"`
}

将解决问题。 Go用例来确定特定标识符在包的上下文中是公共标识符还是私有标识符。在您的代码中,xml.Unmarshal不会显示这些字段,因为它不是包含代码的包的一部分。

当您将字段更改为大写字母时,它们变为公共字段,因此可以导出。

工作示例:https://play.golang.org/p/h8Q4t_3ctS