登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-30 20:02:37 255浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《无法使用 golang 解码 XML,始终为空结构》,主要介绍了golang,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我正在尝试使用 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 := 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)
    }
}

正确答案

您需要按照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
}

今天关于《无法使用 golang 解码 XML,始终为空结构》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表