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 關注
- 168 瀏覽
添加回答
舉報