为了账号安全,请及时绑定邮箱和手机立即绑定

在go中将数组编组为单个xml元素

在go中将数组编组为单个xml元素

Go
jeck猫 2021-05-20 14:14:36
我正在通过编写一个以Collada格式生成文件的程序来学习Go,该程序使用XML描述几何。您可以对结构进行注释,几乎所有的工作都可以按预期的方式进行,但我无法弄清楚如何将数组编组为一个XML元素-我总是最终生成N个元素。换句话说,我想<input>    <p>0 1 2</p></input> 代替<input>    <p>0</p>    <p>1</p>    <p>2</p></input> 代码如下package mainimport (    "encoding/xml"    "os")func main() {    type Vert struct {        XMLName xml.Name    `xml:"input"`        Indices     []int   `xml:"p"`    }    v := &Vert{Indices:[]int{0, 1, 2}}    output, err := xml.MarshalIndent(v, "", "    ")    if err == nil {        os.Stdout.Write(output)    }}来自encoding / xml / marshal.go的各种注释(和代码)似乎暗示我不走运://元数据通过将每个元素编组来处理数组或切片。//切片和数组遍历元素。它们没有封闭标签。奇怪的是,如果我将数组类型更改为uint8,则根本不会将数组编组。如果我不走运,我可能会使用xml:“,innerxml”注释自己替换数组。
查看完整描述

2 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

就像您猜到的那样,encoding / xml将无法立即执行此操作。您可以改为执行以下操作:


import (

    "strconv"

    "strings"

)


type Vert struct {

    P string `xml:"p"`

}


func (v *Vert) SetIndices(indices []int) {

    s := make([]string, len(indices))

    for i := range indices {

        s[i] = strconv.FormatInt(int64(indices[i]), 10)

    }

    v.P = strings.Join(s, " ")

}

编辑:我最初写了一个吸气剂,而不是二传手。


查看完整回答
反对 回复 2021-05-24
  • 2 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信