有没有一种方法可以解组具有动态属性的XML标签(我不知道每次都会获得哪些属性)。
也许尚不支持。请参阅问题3633:encoding / xml:支持收集所有属性
就像是 :
package main import ( "encoding/xml" "fmt" ) func main() { var v struct { Attributes []xml.Attr `xml:",any"` } data := `<TAG ATTR1="VALUE1" ATTR2="VALUE2" />` err := xml.Unmarshal([]byte(data), &v) if err != nil { panic(err) } fmt.Println(v) }
您需要实现自己的XMLUnmarshaler
package main import ( "encoding/xml" "fmt" ) type CustomTag struct { Name string Attributes []xml.Attr } func (c *CustomTag) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { c.Name = start.Name.Local c.Attributes = start.Attr return d.Skip() } func main() { v := &CustomTag{} data := []byte(`<tag ATTR1="VALUE1" ATTR2="VALUE2" />`) err := xml.Unmarshal(data, &v) if err != nil { panic(err) } fmt.Printf("%+v\n", v) }
输出
&{Name:tag Attributes:[{Name:{Space: Local:ATTR1} Value:VALUE1} {Name:{Space: Local:ATTR2} Value:VALUE2}]}
http://play.golang.org/p/9ZrpIT32o_