Ответы пользователя по тегу Go
  • Как при использовании encoding/xml распарсить XML-элемент с произвольными атрибутами?

    @ogrim
    type Rewards struct {
    	XMLName xml.Name `xml:"rewards"`
    	Rewards []Reward `xml:"reward"`
    }
    
    type Reward struct {
    	Value string
    	Attrs map[string]string
    }
    
    func (r *Reward) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
    	r.Attrs = make(map[string]string)
    	for _, attr := range start.Attr {
    		r.Attrs[attr.Name.Local] = attr.Value
    	}
    	if err := d.DecodeElement(&r.Value, &start); err != nil {
    		return err
    	}
    	return nil
    }
    // ...
    var obj Rewards
    if err := xml.Unmarshal(data, &obj); err != nil {
    	log.Fatal(err)
    }
    log.Printf("%+v", obj.Rewards)

    [{Value:100 Attrs:map[type:money slot:101 repeated:1]} {Value:1 Attrs:map[bagId:1 repeated:1 type:freedomBagsExp]} {Value:30 Attrs:map[repeated:1 type:rating]} {Value:1 Attrs:map[repeated:1 type:key key_id:2]} {Value:30 Attrs:map[type:guildAP repeated:1]} {Value:2 Attrs:map[key_id:2 repeated:1 type:key]} {Value:476 Attrs:map[repeated:1 type:rating]}]
    Ответ написан
    Комментировать