gpt4 book ai didi

xml - 在 Golang 中编码 XML : field is empty (APPEND doesn't work? )

转载 作者:数据小太阳 更新时间:2023-10-29 03:20:14 26 4
gpt4 key购买 nike

我正在学习用 Go 创建 XML。这是我的代码:

type Request struct {
XMLName xml.Name `xml:"request"`
Action string `xml:"action,attr"`
...
Point []point `xml:"point,omitempty"`
}

type point struct {
geo string `xml:"point"`
radius int `xml:"radius,attr"`
}

func main() {
v := &Request{Action: "get-objects"}
v.Point = append(v.Point, point{geo: "55.703038, 37.554457", radius: 10})
output, err := xml.MarshalIndent(v, " ", " ")
if err != nil {
fmt.Println("error: %v\n", err)
}
os.Stdout.Write([]byte(xml.Header))
os.Stdout.Write(output)

}

我希望输出是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<request action="get-objects">
<point radius=10>55.703038, 37.554457</point>
</request>

但我得到的是:

 <?xml version="1.0" encoding="UTF-8"?>
<request action="get-objects">
<point></point>
</request>

我错过了什么或做错了什么?因为“name,attr”这个东西对其他一切都很完美(例如,对于“request”字段,如您所见)。谢谢。

最佳答案

您的代码中有几处错误。在 Go 中使用编码包时,必须导出所有要编码/解码的字段。请注意,不必导出结构本身。

因此,第一步是更改 point 结构以导出字段:

type point struct {
Geo string `xml:"point"`
Radius int `xml:"radius,attr"`
}

现在,如果要在点内显示Geo 字段,则必须将,cdata 添加到xml 标记中。最后,无需向 slice 添加 omitempty 关键字。

type Request struct {
XMLName xml.Name `xml:"request"`
Action string `xml:"action,attr"`
Point []point `xml:"point"`
}

type point struct {
Geo string `xml:",chardata"`
Radius int `xml:"radius,attr"`
}

Go playground

关于xml - 在 Golang 中编码 XML : field is empty (APPEND doesn't work? ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55147099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com