dsb0003795 2018-04-04 08:22
浏览 277
已采纳

使用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.

  • 写回答

2条回答 默认 最新

  • dongzhong1891 2018-04-04 08:40
    关注

    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>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵