xml - 在Golang中使用encoding/xml包制作soap xml

标签 xml go

我想制作一个示例 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/

相关文章:

java - 将 XML 从标记重新格式化为属性和名称

xml - 去,编码/xml : How can I marshal self-closing elements?

pointers - 理解 Go 中的指针

xml - 如何在 Go 中处理嵌套的 XML 标签?

google-app-engine - goapp 二进制文件在哪里?

python - 如何通过 python 从不同的 XML 文件中获取元素来创建一个新文件?

python - 覆盖 lxml 行为以编写 Null 标记的结束和开始元素

java - 用 Java 读取大型 XML 文件的最快方法

c# - 从 xml 文档获取单个节点 c#

go - 如何在 gorm 中获取结构(内部结构)值