在Golang中缺少Xml标签

huangapple go评论71阅读模式
英文:

Missing Xml Tag in Golang

问题

我是你的中文翻译助手,以下是你提供的代码的翻译:

我是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缺失了。我尝试了多种方式,但总是会缺少某个标签。我猜测我没有正确理解结构体标签的用法。所以在上面的代码中,我做错了什么?我缺少了哪些基本的Golang结构体概念?

英文:

I am new to golang I am trying to make a xml in which i am using nested tags

For that my code is

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

}

but in my output xml Tag newXml is missing. I have tried it in various ways but some tag is always missing. I guess i am not understanding struct tag properly. So What i am doing wrong in above code and which basic concept of golang struct i am missing

答案1

得分: 2

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

NewXml没有任何字段(你只给它一个名称,但没有其他内容),所以它不会被序列化。如果你给它添加一个新的字段,你会发现它会被序列化。

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

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

英文:

I had a look at the xml package doc and they say that "an anonymous struct field is handled as if the fields of its value were part of the outer struct". In your case, all fields thus get serialized as if they were part of MyXml.

NewXml does not have any field (you just give it a name but there is nothing else) so nothing gets serialized for it.
If you add a new field to it, you can see that it is serialized.

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

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

huangapple
  • 本文由 发表于 2014年4月23日 20:11:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/23243860.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定