I want to make a sample xml that repeats a field depending on the value of the slice. But the final result is not as desired.
XML that I want to create
recipients = ["num1","num2",...]
//Start XML
.
.
.
<SendDetail>
<item><Mobile>num1</Mobile></item>
<item><Mobile>num2</Mobile></item>
...
</SendDetail>
The number of repetitions of depends on the length of the slice of recipients and its values.
My Code
type item struct {
Mobile []string `xml:"Mobile"`
}
type sendDetail struct {
Item *[]item `xml:"item"`
}
SendDetail: &sendDetail{
Item:&[]item{
item{
Mobile:recipients,
},
},
},
Result
<SendDetail>
<item>
<Mobile>num1</Mobile>
<Mobile>num2</Mobile>
</item>
</SendDetail>
Any pointers will be appreciated.
In your XML inside an <item>
there is only a single <Mobile>
tag. You don't want to repeat the <Mobile>
tag but the <item>
tag. So in Go you have to create a new Item
for each number.
Model it like this:
type Item struct {
Mobile string `xml:"Mobile"`
}
type SendDetail struct {
Items []*Item `xml:"item"`
}
Example using the model:
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))
Output (try it on the Go Playground):
<SendDetail>
<item>
<Mobile>num1</Mobile>
</item>
<item>
<Mobile>num2</Mobile>
</item>
</SendDetail>
soap最大的问题在于带命名空间的序列化和反序列化
例如:soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
如何生成。。