Golang无法将XML映射到Struct

时间:2019-05-09 10:54:47

标签: go

我想将XML数据映射到Struct对象。我有以下代码:

package main
import (
    "encoding/xml"
    "fmt"
)

func main() {
    type FileDetails struct {
        XMLName   xml.Name `xml:"FileDetails"`
        FileName string
        FileSize string
    }

    type DataRequest struct {
        XMLName   xml.Name `xml:"Data"`
        DataRequestList []FileDetails
    }

    type Request struct {
        XMLName   xml.Name `xml:"Request"`
        DataReqObject DataRequest `xml:"Data"`
    }
    req := Request{}

    data := `
        <Request>
            <Data>
                <FileDetails>
                    <FileName>abc</FileSize>
                    <FileSize>10</FileSize>
                </FileDetails>
                <FileDetails>
                    <FileName>pqr</FileSize>
                    <FileSize>20</FileSize>
                </FileDetails>
            </Data>
        </Request>
    `
    err := xml.Unmarshal([]byte(data), &req)
    if err != nil {
        fmt.Printf("error: %v", err)
        return
    }
    fmt.Printf("XMLName: %#v\n", req.XMLName)
    fmt.Printf("XMLName: %v\n", req.DataReqObject)
    fmt.Printf("XMLName: %v\n", req.DataReqObject.DataRequestList[0])
}

也可以在这里访问: https://play.golang.org/p/VAMM9M2CejH

我得到以下带有上面代码的输出:

XMLName: xml.Name{Space:"", Local:"Request"}
Data: {{ Data} []}
panic: runtime error: index out of range

结构是否需要对我的数据使用不同的结构?为什么此映射失败?

1 个答案:

答案 0 :(得分:1)

您的代码段存在三个问题:

#1

xml:"FileDetails"上缺少标签DataRequestList


#2

FileDetails结构与提供的游乐场链接中的xml不匹配!


#3

<FileName>标签用</FileSize>标签关闭!


Go playground工作示例!