我是Golang的新手我正在尝试制作一个使用嵌套标签的xml
为此,我的代码是
type MyXml struct {
XMLName xml.Name `xml:"myXml"`
Id int `xml:"id,attr"`
NewXml
}
type NewXml struct {
XMLName xml.Name `xml:"newXml"`
OneMoreXml
}
type OneMoreXml struct {
Msg interface{} `xml:"oneMore"`
}
type Child struct {
Param1 string `xml:"Param1"`
}
func main() {
baseXml := &Child{Param1: "Param1"}
retXml := GetXml(baseXml)
fmt.Println("my xml is", retXml)
}
func MarshallXml(reqString interface{}) (newXml string) {
xmlBody, err := xml.Marshal(reqString)
if err != nil {
fmt.Printf("error: %v\n", err)
}
newXml = string(xmlBody)
//fmt.Println(newXml)
return
}
func GetXml(baseXml interface{}) (finalXml string) {
startXml := new(MyXml)
startXml.Id = 1
startXml.Msg = baseXml
finalXml = MarshallXml(startXml)
return
}
但在我的输出xml标签中缺少newXml。我已经以各种方式尝试过,但有些标签总是丢失。我想我不是正确理解struct标签。那么我在上面的代码中做错了什么以及缺少golang struct的基本概念
答案 0 :(得分:2)
我看了一下xml包文档,他们说“处理一个匿名结构字段就好像它的值的字段是外部结构的一部分”。在您的情况下,所有字段因此被序列化,就好像它们是MyXml的一部分。
NewXml没有任何字段(你只是给它一个名字但没有别的东西)所以没有为它序列化。 如果向其添加新字段,则可以看到它已序列化。
type NewXml struct {
XMLName xml.Name `xml:"newXml"`
Test int
OneMoreXml
}