在Golang中缺少Xml标记

时间:2014-04-23 12:11:24

标签: go

我是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的基本概念

1 个答案:

答案 0 :(得分:2)

我看了一下xml包文档,他们说“处理一个匿名结构字段就好像它的值的字段是外部结构的一部分”。在您的情况下,所有字段因此被序列化,就好像它们是MyXml的一部分。

NewXml没有任何字段(你只是给它一个名字但没有别的东西)所以没有为它序列化。 如果向其添加新字段,则可以看到它已序列化。

type NewXml struct {
    XMLName xml.Name `xml:"newXml"`
    Test    int
    OneMoreXml
}

http://play.golang.org/p/vibSeQHTCr