go - 将结构编组为带有额外标记的 xml
问题描述
我正在用 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 为此创建了一个暂停标签,让它暂停一秒钟。所以我想要的是像这样生成一个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"`
}
解决方案
使用接口找到解决方案
type Say struct {
XMLName xml.Name `xml:"Say"`
Text string `xml:",chardata"`
}
type Response struct {
XMLName xml.Name `xml:"Response"`
Says []interface{}
}
缺少实际类型名称不会生成“说”标签。
var r Response
r.Says = append(r.Says, Say { Text: "hello"})
推荐阅读
- swift - Apple 是否有办法将一个视图的外观(即您在屏幕上实际看到的内容)复制到图像缓冲区中?
- c# - 使用 SharpSerializer 反序列化 Arraylist 的 Arraylist
- applescript - applescript中的文本格式问题
- html - HTML/CSS 将 2 个元素与 1 个元素对齐,例如 2 个输入与一个标签
- arrays - VBA 匹配 0 与接近于零的科学计数法
- javascript - 如何将变量用作对象内的索引?(Javascript)
- java - ContextThemeWrapper 更改 android 中的样式
- snowflake-cloud-data-platform - 从雪花的另一个表中添加列
- html - 如何链接到谷歌照片中的图像但下载文件而不是打开它
- python - Python [Errno 8] 执行格式错误:'/app/.venv/bin/python'