I do not think it is possible to directly map a list of items discriminated by an attribute value to specific fields. You need to map it to a slice, like in the following example (Items slice):
package main
import (
"encoding/xml"
"fmt"
)
func main() {
type Item struct {
Type string `xml:"type,attr"`
Value string `xml:",chardata"`
}
type Something struct {
XMLName xml.Name `xml:"something"`
Name string `xml:"name"`
Items []Item `xml:"value"`
}
var v Something
data := `
<something>
<name> toto </name>
<value type="item"> my item </value>
<value type="other"> my other value </value>
</something>
`
err := xml.Unmarshal([]byte(data), &v)
if err != nil {
fmt.Printf("error: %v", err)
return
}
fmt.Println(v)
}
Up to you to process the slice after the decoding to extract the values and put them in specific fields if needed.