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 关注
- 1516 浏览
添加回答
举报