1 回答

TA貢獻1820條經驗 獲得超9個贊
簡而言之,你不能直接這樣做。繞過 XML 結構的常見模式是實現xml.Unmarshaler接口。下面是一個例子:
type Way struct {
ID int
Nodes []int
}
func (w *Way) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
var payload struct {
ID int `xml:"id,attr"`
Nodes []struct {
Ref int `xml:"ref,attr"`
} `xml:"nd"`
}
err := d.DecodeElement(&payload, &start)
if err != nil {
return err
}
w.ID = payload.ID
w.Nodes = make([]int, 0, len(payload.Nodes))
for _, node := range payload.Nodes {
w.Nodes = append(w.Nodes, node.Ref)
}
return nil
}
在這里,payload變量是根據您的 XML 數據建模的,而Way結構則是按照您希望的方式建模的。一旦有效載荷被解碼,您就可以使用它來根據需要初始化Way變量……
邊注: // Why can't I return nil, err?
您不能返回,nil因為Way它既不是指針也不是接口,因此nil不是它的有效值。
- 1 回答
- 0 關注
- 2021 瀏覽
添加回答
舉報