在Golang中使用encoding/xml包生成soap xml

在Golang中使用encoding/xml包生成soap xml,xml,go,Xml,Go,我想制作一个示例xml,根据切片的值重复一个字段。但最终的结果并不理想 我要创建的XML recipients = ["num1","num2",...] //Start XML . . . <SendDetail> <item><Mobile>num1</Mobile></item> <

我想制作一个示例xml,根据切片的值重复一个字段。但最终的结果并不理想

我要创建的XML

        recipients = ["num1","num2",...]

        //Start XML
        .
        .
        .
        <SendDetail>
            <item><Mobile>num1</Mobile></item>
            <item><Mobile>num2</Mobile></item>
            ...
        </SendDetail>  
        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>

num1
num2

任何指针都将受到欢迎。

内的XML中只有一个
标记。您不想重复
标记,但要重复
标记。因此,在围棋中,你必须为每个数字创建一个新的
项目

模型如下:

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))
输出(在上尝试):


num1
num2

看起来您想要的是物品。移动设备是字符串,而不是字符串片段。非常感谢@icza
<SendDetail>
  <item>
    <Mobile>num1</Mobile>
  </item>
  <item>
    <Mobile>num2</Mobile>
  </item>
</SendDetail>