dongsou4301 2016-03-03 13:06
浏览 22
已采纳

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

I have been given the following XML structure

<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>

I want to unmarshall it into the following:

type Property string {
    Name string
    Value string
}

type Properties struct {
    Props []Property 
    DateTime time.Time
    Category string
}

but I don't know how to process the out of order Properties

  • 写回答

1条回答 默认 最新

  • douzhang6176 2016-03-03 13:18
    关注

    The encoding/xml package handles that for you. You just have to properly tag your struct fields to tell the xml package how they are found in the XML source:

    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"`
    }
    

    Note that I changed the type of DateTime field to string because the timestamp in the XML (13 Jan 2015 14:13:15GMT) does not conform to standard (which would be ISO 8601, in Go layout: 2006-01-02T15:04:05Z07:00 which is time.RFC3339).

    Code to unmarshal:

    ps := Properties{}
    if err := xml.Unmarshal([]byte(src), &ps); err != nil {
        panic(err)
    }
    fmt.Printf("%+v", ps)
    

    Output (try it on the 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}
    

    You can see that Props properly contains all 7 properties in correct order even though <datetime> and <categorisation> tags are inserted between them.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值