Хм. Как мне казалось, такое:
type Discount struct {
XSIType string `xml:"xsi type,attr"`
Type string `xml:"type,attr"`
From string `xml:"from,attr"`
To string `xml:"to,attr"`
}
должно было работать. Но анмаршал ругается:
error: main.Discount field "XSIType" with tag "xsi type,attr" conflicts with field "Type" with tag "type,attr"
Судя по тому, что это уже чинили для элементов (в
https://github.com/golang/go/issues/3703), похоже на баг. Отправил
https://github.com/golang/go/issues/11724.
Пока могу лишь предложить вот такой костыль:
type Discount struct {
XSIType string `xml:"xsi type_,attr"`
Type string `xml:"type,attr"`
From string `xml:"from,attr"`
To string `xml:"to,attr"`
}
// ...
s := `<Discount xsi:type="ProgressivePromotion" from="2015-07-28T00:00:00" to="2015-07-30T00:00:00" type="Percent" value="38" name="Special Deal" />`
s = strings.Replace(s, " xsi:type=", " xsi:type_=", -1)
Либо как-то ещё переименовать type, если есть доступ к тому, откуда идёт XML.