使用额外的标签将结构封送至xml

时间:2019-07-12 06:39:17

标签: go

我正在Go中开发一个twilio电话服务器,并且有一些引用xml的结构来生成。

例如:

type Say struct {
    XMLName xml.Name `xml:"Say"`

    Text string `xml:",chardata"`
}

type Response struct {
    XMLName xml.Name `xml:"Response"`
    Says []Say `xml:",omitempty"`
}

当Says数组填充有两个包含“ Something”和“ Something else”的Say结构时,将生成:

<Response>
  <Say>Something</Say>
  <Say>Something else</Say>
</Response>

但是在大​​声说出“某事”之后,就没有暂停了,紧接着是“其他”。

twilio为此创建了一个Pause标签,以使其暂停一秒钟。 所以我想要的是生成一个像这样的xml:

<Response>
  <Say>Something</Say>
  <Pause></Pause>
  <Say>Something else</Say>
  <Pause></Pause>
</Response>

但是如何在go结构中表示呢?如何挤入一个额外的Pause标签作为Say标签的同级标签?

type Say struct {
    XMLName xml.Name `xml:"Say"`

    Text string `xml:",chardata"`
    ???? Pause `xml:Pause,sibling?????`
}

type Response struct {
    XMLName xml.Name `xml:"Response"`
    Says []Say `xml:",omitempty"`
}

1 个答案:

答案 0 :(得分:0)

通过使用界面找到了解决方案

type Say struct {
    XMLName xml.Name `xml:"Say"`

    Text string `xml:",chardata"`
}

type Response struct {
    XMLName xml.Name `xml:"Response"`
    Says []interface{}
}

缺少实际的类型名称不会生成'Says'标签。

var r Response

r.Says = append(r.Says, Say { Text: "hello"})