code: func (d *Decoder) DecodeElement(v interface{}, start *StartElement) error {
  	val := reflect.ValueOf(v)
  	if val.Kind() != reflect.Ptr {
  		return errors.New("non-pointer passed to Unmarshal")
  	}
  	return d.unmarshal(val.Elem(), start)
  }
docs: // DecodeElement works like xml.Unmarshal except that it takes
  // a pointer to the start XML element to decode into v.
  // It is useful when a client reads some raw XML tokens itself
  // but also wants to defer to Unmarshal for some elements.