Let's say I have this XML:
<something>
<value type="item">
...
</value>
<value type="other">
...
</value>
</something>
Can I somehow extract the value with different attributes to different items on my struct, like:
type Something struct {
Item Item `xml:"value[type=item]"` // metacode
Other Other `xml:"value[type=other]"`
}
Is it possible? What should I use as the xml: attribute?
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.