猿问

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

我正在尝试使用 golang 解码 XML,但以下代码给出了一个空结构


任何人都可以帮忙吗?


当我运行以下代码时,我总是得到


{{ packet} []}

附上源码:


package main


import (

    "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)

    }

}


一只名叫tom的猫
浏览 210回答 1
1回答

largeQ

您需要按照https://golang.org/pkg/encoding/xml/#Unmarshal导出结构字段因为 Unmarshal 使用反射包,它只能分配给导出的(大写)字段。Unmarshal 使用区分大小写的比较来将 XML 元素名称与标记值和结构字段名称相匹配。例如type Proto struct {&nbsp; &nbsp; XMLName xml.Name `xml:"field"`&nbsp; &nbsp; Name&nbsp; &nbsp; &nbsp; string `xml:"name,attr"`&nbsp; &nbsp; Shownameg string `xml:"showname,attr"`&nbsp; &nbsp; Fields []Field}
随时随地看视频慕课网APP

相关分类

Go
我要回答