我获得了以下XML结构
<properties>
<property name="element1">data1</property>
<property name="element2">data2</property>
<datetime name="start">13 Jan 2015 14:13:15GMT</datetime>
<property name="element3">data3</property>
<property name="element4">data4</property>
<property name="element5">data5</property>
<categorisation name="category">cat1</categorisation>
<property name="element6">data6</property>
<property name="element7">data7</property>
</properties>
我想将其解组为以下内容:
type Property string {
Name string
Value string
}
type Properties struct {
Props []Property
DateTime time.Time
Category string
}
但我不知道如何处理无序属性
答案 0 :(得分:2)
encoding/xml
包会为您处理。您只需要正确地标记您的结构字段,以告诉xml
包在XML源中如何找到它们:
type Property struct {
Name string `xml:"name,attr"`
Value string `xml:",cdata"`
}
type Properties struct {
Props []Property `xml:"property"`
DateTime string `xml:"datetime"`
Category string `xml:"categorisation"`
}
请注意,我将DateTime
字段的类型更改为string
,因为XML中的时间戳(13 Jan 2015 14:13:15GMT
)不符合标准(ISO 8601,在Go布局中:2006-01-02T15:04:05Z07:00
,即time.RFC3339
)。
解组编码:
ps := Properties{}
if err := xml.Unmarshal([]byte(src), &ps); err != nil {
panic(err)
}
fmt.Printf("%+v", ps)
输出(在Go Playground上尝试):
{Props:[{Name:element1 Value:data1} {Name:element2 Value:data2} {Name:element3 Value:data3}
{Name:element4 Value:data4} {Name:element5 Value:data5} {Name:element6 Value:data6}
{Name:element7 Value:data7}] DateTime:13 Jan 2015 14:13:15GMT Category:cat1}
即使Props
和<datetime>
标签插入其中,您也可以看到<categorisation>
正确包含所有7个属性的正确顺序。