如何在 Go 中将多行编组为 XML?

How to marshal multiline to XML in Go?

我需要将坐标存储到 KML 文件中。应该是这样的:

<coordinates>
            51.600223,25.003058,0
            51.600223,25.003065,0
            51.600213,25.003065,0
            51.600212,25.003065,0
            51.600217,25.003075,0
</coordinates>

如果我加入字符串并尝试将其编组为一个字符串,我会为每一行得到 &#xA

KmlLineString struct {
    Coordinates string `xml:"coordinates"`
}

如果我将其更改为 Coordinates []string`xml:"coordinates"` ,我会在每一行上添加标签。

我该怎么做?

正如@icza 在他的评论中指出的那样,&#xA; 是一个转义的新行,并且是编组 XML 时的正确输出。任何有效的 XML 解码器都能够解组它并理解它代表什么。

如果你想输出文字换行,也许是为了让 XML 更人性化,那么你可以使用 ,innerxml 标签选项。此选项指示编码器逐字编组内容。但是,正如@icza 在另一条评论中指出的那样,如果用 ,innerxml 标记的字段包含无效的 XML,则对此类字段进行编组的结果也将是无效的 XML.

例如:

var xml_data = `<coordinates>
            51.600223,25.003058,0
            51.600223,25.003065,0
            51.600213,25.003065,0
            51.600212,25.003065,0
            51.600217,25.003075,0
</coordinates>`

type KmlLineString struct {
    Coordinates string `xml:",innerxml"`
}

https://go.dev/play/p/kXOjZZ-DyHc

或者

var xml_data = `
            51.600223,25.003058,0
            51.600223,25.003065,0
            51.600213,25.003065,0
            51.600212,25.003065,0
            51.600217,25.003075,0
`

type KmlLineString struct {
    Coordinates Coordinates `xml:"coordinates"`
}

type Coordinates struct {
    Value string `xml:",innerxml"`
}

https://go.dev/play/p/kiN-NUt67ny