Go:解组包含不同实体的 XML 列表

我得到了以下 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

}

但我不知道如何处理乱序属性


料青山看我应如是
浏览 166回答 1
1回答

犯罪嫌疑人X

该encoding/xml软件包会为您处理。您只需要正确标记您的结构字段以告诉xml包它们是如何在 XML 源中找到的:type Property struct {&nbsp; &nbsp; Name&nbsp; string `xml:"name,attr"`&nbsp; &nbsp; Value string `xml:",cdata"`}type Properties struct {&nbsp; &nbsp; Props&nbsp; &nbsp; []Property `xml:"property"`&nbsp; &nbsp; DateTime string&nbsp; &nbsp; &nbsp;`xml:"datetime"`&nbsp; &nbsp; Category string&nbsp; &nbsp; &nbsp;`xml:"categorisation"`}请注意,我将DateTime字段类型更改为,string因为 XML ( 13 Jan 2015 14:13:15GMT) 中的时间戳不符合标准(在 Go layout:中为ISO 8601)。2006-01-02T15:04:05Z07:00time.RFC3339解组代码:ps := Properties{}if err := xml.Unmarshal([]byte(src), &ps); err != nil {&nbsp; &nbsp; panic(err)}fmt.Printf("%+v", ps)输出(在Go Playground上试试):{Props:[{Name:element1 Value:data1} {Name:element2 Value:data2} {Name:element3 Value:data3}&nbsp;{Name:element4 Value:data4} {Name:element5 Value:data5} {Name:element6 Value:data6}&nbsp;{Name:element7 Value:data7}] DateTime:13 Jan 2015 14:13:15GMT Category:cat1}你可以看到,Props正常包含正确的顺序所有7个性能即使<datetime>和<categorisation>标签插入它们之间。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go