为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 golang 解码 XML,始终为空结构

无法使用 golang 解码 XML,始终为空结构

Go
一只名叫tom的猫 2021-12-07 16:54:22
我正在尝试使用 golang 解码 XML,但以下代码给出了一个空结构任何人都可以帮忙吗?当我运行以下代码时,我总是得到{{ packet} []}附上源码:package mainimport (    "fmt"    "encoding/xml"//    "io/ioutil")type Field struct {    XMLName xml.Name `xml:"field"`    name      string `xml:"name,attr"`    shownameg string `xml:"showname,attr"`    fields []Field}type Proto struct {    XMLName xml.Name `xml:"proto"`    name      string `xml:"name,attr"`    shownameg string `xml:"showname,attr"`    fields []Field}type Packet struct {    XMLName xml.Name `xml:"packet"`    protos []Proto   `xml:"proto"`}func main () {       data := []byte(`<packet>  <proto name="geninfo" pos="0" showname="General information" size="122">    <field name="timestamp" pos="0" show="Jul 17, 2008 15:50:25.136434000 CST" showname="Captured Time" value="1216281025.136434000" size="122"/>  </proto></packet>    `)    packet := Packet{}    err := xml.Unmarshal([]byte(data), &packet)    if err != nil {        fmt.Println (err)        return    }    fmt.Println (packet)    for proto, _ := range (packet.protos) {        fmt.Println (proto)    }}
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

您需要按照https://golang.org/pkg/encoding/xml/#Unmarshal导出结构字段


因为 Unmarshal 使用反射包,它只能分配给导出的(大写)字段。Unmarshal 使用区分大小写的比较来将 XML 元素名称与标记值和结构字段名称相匹配。


例如


type Proto struct {

    XMLName xml.Name `xml:"field"`

    Name      string `xml:"name,attr"`

    Shownameg string `xml:"showname,attr"`

    Fields []Field

}


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信