2 回答
TA贡献1799条经验 获得超8个赞
您可以实施自定义xml.Unmarshaler
以获得所需的结果。
type Rate struct {
Currency string `xml:"currency,attr"`
Rate string `xml:"rate,attr"`
Date string `xml:"time,attr"`
}
type Rates struct {
Rates RateList `xml:"Cube>Cube"`
}
type RateList []Rate
func (ls *RateList) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
date := start.Attr[0].Value
for {
tok, err := d.Token()
if err != nil {
if err == io.EOF {
return nil
}
return err
}
if se, ok := tok.(xml.StartElement); ok {
rate := Rate{Date: date}
if err := d.DecodeElement(&rate, &se); err != nil {
return err
}
*ls = append(*ls, rate)
}
}
}
TA贡献1840条经验 获得超5个赞
确保您要么信任 XML,要么事先使用XSD之类的东西验证/清理它。出于安全原因,以及为了能够回顾并查看您“解组”的数据是否正确,应该这样做,因为当您处理大量 XML 时,其中一些肯定会被破坏。
- 2 回答
- 0 关注
- 121 浏览
添加回答
举报