使用Golang中的encoding / xml包制作soap xml

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/"

如何生成。。