Go:Marshall数组/不同类型的切片到XML

时间:2016-03-18 11:08:30

标签: xml go

我有一个结构

type Response struct {
  Verbs []interface{}
}

和其他一些动词结构如

type Verb1 struct{
  Field1 string
  ...
}

type Verb2 struct{
  Field2 int
  ...
} 

如何从对象

&Response{Verbs: []interface{}{Verb1{}, Verb2{}, Verb1{}}}

获取XML

<Response><Verb1>...</Verb1><Verb2>...</Verb2><Verb1>...</Verb1></Response>

我尝试使用encoding/xml,但它也会生成元素Verbs

<Response><Verbs><Verb1>...</Verb1><Verb2>...</Verb2><Verb1>...</Verb1></Verbs></Response>

如何避免几代<Verbs>

1 个答案:

答案 0 :(得分:1)

您需要明确命名Verb类型。

package main

import (
    "encoding/xml"
    "fmt"
)

type Root struct {
    Container []interface{}
}

type A struct {
    XMLName xml.Name `xml:"A"`
    Value   string   `xml:",chardata"`
}

type B struct {
    XMLName xml.Name `xml:"B"`
    Value   string   `xml:",chardata"`
}

func main() {
    r := Root{
        Container: []interface{}{
            A{Value: "a"},
            B{Value: "b"},
        },
    }
    text, _ := xml.Marshal(r)
    fmt.Println(string(text))
}

Playground