Go 使用额外的标记将结构封送到xml
我正在Go中开发一个twilio电话服务器,并有一些引用xml生成的结构 例如:Go 使用额外的标记将结构封送到xml,go,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"` } 当Say数组填充两个包含“Something
type Say struct {
XMLName xml.Name `xml:"Say"`
Text string `xml:",chardata"`
}
type Response struct {
XMLName xml.Name `xml:"Response"`
Says []Say `xml:",omitempty"`
}
当Say数组填充两个包含“Something”和“Something other”的Say结构时,会生成:
<Response>
<Say>Something</Say>
<Say>Something else</Say>
</Response>
找到了使用接口的解决方案
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"})
找到了使用接口的解决方案
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"})
因此,基本上你想确保你有一个有效的序列,在这个序列中,暂停应该只在一个
后面,比如说通过结构标记来进行的
?是的,这就是我想说的,这仅仅是结构标记是不可能的,听起来更像是XSD的工作。当然,您可以使用标记器编写自定义验证器,如果遇到的第一个元素是暂停,则会失败。然而,使用XSD还是自定义验证器在很大程度上取决于您的用例。因此,基本上,您希望确保有一个有效的序列,在这个序列中,暂停应该只通过结构标记在后面,比如说?是的,这就是我想要的,仅使用结构标记是不可能的,听起来更像是XSD的作业。当然,您可以使用标记器编写自定义验证器,如果遇到的第一个元素是暂停,则会失败。然而,使用XSD还是自定义验证器在很大程度上取决于您的用例。