1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
package xmlstruct
import (
"fmt"
"reflect"
)
func ParseStruct(i interface{}) (*XMLRoot, error) {
ret := &XMLRoot{}
val := reflect.ValueOf(i)
if val.Kind() == reflect.Ptr {
val = val.Elem()
}
if val.Kind() != reflect.Struct {
return ret, fmt.Errorf("Interface is not a struct")
}
if getXMLName(val).Local == "" {
return nil, fmt.Errorf("Invalid XML struct")
}
ret.Ele = &XMLEle{Val: val, pos: 1, prnt: ret}
return ret, nil
}
func MustParseStruct(i interface{}) *XMLRoot {
ret, err := ParseStruct(i)
if err != nil {
panic(err)
}
return ret
}
|