我想制作一个示例 xml,根据 slice 的值重复一个字段。但最终的结果却不尽如人意。
我要创建的 XML
recipients = ["num1","num2",...]
//Start XML
.
.
.
<SendDetail>
<item><Mobile>num1</Mobile></item>
<item><Mobile>num2</Mobile></item>
...
</SendDetail>
重复的次数取决于接收者 slice 的长度及其值。
我的代码
type item struct {
Mobile []string `xml:"Mobile"`
}
type sendDetail struct {
Item *[]item `xml:"item"`
}
SendDetail: &sendDetail{
Item:&[]item{
item{
Mobile:recipients,
},
},
},
结果
<SendDetail>
<item>
<Mobile>num1</Mobile>
<Mobile>num2</Mobile>
</item>
</SendDetail>
任何指示将不胜感激。
最佳答案
在您的 XML 中 <item>
只有一个<Mobile>
标签。您不想重复<Mobile>
标签但 <item>
标签。所以在 Go 中你必须创建一个新的 Item
对于每个数字。
像这样建模:
type Item struct {
Mobile string `xml:"Mobile"`
}
type SendDetail struct {
Items []*Item `xml:"item"`
}
使用模型的示例:
recipients := []string{"num1", "num2"}
sd := &SendDetail{}
for _, recipient := range recipients {
sd.Items = append(sd.Items, &Item{Mobile: recipient})
}
data, err := xml.MarshalIndent(sd, "", " ")
if err != nil {
panic(err)
}
fmt.Println(string(data))
输出(在 Go Playground 上尝试):
<SendDetail>
<item>
<Mobile>num1</Mobile>
</item>
<item>
<Mobile>num2</Mobile>
</item>
</SendDetail>
关于xml - 在Golang中使用encoding/xml包制作soap xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49646079/