我正在通过编写一个以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, " ")
}
编辑:我最初写了一个吸气剂,而不是二传手。
- 2 回答
- 0 关注
- 192 浏览
添加回答
举报
0/150
提交
取消