Голанг не может отобразить XML на Struct - PullRequest
0 голосов
/ 09 мая 2019

Я хочу отобразить данные 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 Ответ

1 голос
/ 09 мая 2019

Три проблемы с вашим фрагментом:

# 1

Тег xml:"FileDetails" отсутствует на DataRequestList


# 2

Структура FileDetails не соответствует вашему xml в предоставленной ссылке для игровой площадки!


# 3

Тег

<FileName> закрыт тегом </FileSize>!


Игровая площадка Go Рабочий пример!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...