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

我正在通过编写一个以Collada格式生成文件的程序来学习Go,该程序使用XML描述几何。


您可以对结构进行注释,几乎所有的工作都可以按预期的方式进行,但我无法弄清楚如何将数组编组为一个XML元素-我总是最终生成N个元素。


换句话说,我想


<input>

    <p>0 1 2</p>

</input> 

代替


<input>

    <p>0</p>

    <p>1</p>

    <p>2</p>

</input> 

代码如下


package main


import (

    "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”注释自己替换数组。


jeck猫
浏览 193回答 2
2回答

凤凰求蛊

就像您猜到的那样,encoding / xml将无法立即执行此操作。您可以改为执行以下操作:import (&nbsp; &nbsp; "strconv"&nbsp; &nbsp; "strings")type Vert struct {&nbsp; &nbsp; P string `xml:"p"`}func (v *Vert) SetIndices(indices []int) {&nbsp; &nbsp; s := make([]string, len(indices))&nbsp; &nbsp; for i := range indices {&nbsp; &nbsp; &nbsp; &nbsp; s[i] = strconv.FormatInt(int64(indices[i]), 10)&nbsp; &nbsp; }&nbsp; &nbsp; v.P = strings.Join(s, " ")}编辑:我最初写了一个吸气剂,而不是二传手。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go