Golang marshal动态xml元素名称

Kir*_*ril 2 xml marshalling go unmarshalling

xml文件由两个元素组成.除了一个元素名称外,这些元素具有相同的结构.我试图为XMLName属性设置一个值,但这不起作用.

XML:

<!-- first element -->
<PERSON>
  <ELEM1>...</ELEM1>
  <ELEM2>...</ELEM2>
  <ELEM3>...</ELEM3>
  <ELEM4>...</ELEM4>
</PERSON>


<!-- second element -->
<SENDER>
  <ELEM1>...</ELEM1>
  <ELEM2>...</ELEM2>
  <ELEM3>...</ELEM3>
  <ELEM4>...</ELEM4>
</SENDER>
Run Code Online (Sandbox Code Playgroud)

是否可以定义一个结构,使元素名称是动态的?

type Person struct {
    XMLName string `xml:"???"` // How make this dynamic?
    e1 string `xml:"ELEM1"`
    e2 string `xml:"ELEM2"`
    e3 string `xml:"ELEM3"`
    e4 string `xml:"ELEM4"`
}
Run Code Online (Sandbox Code Playgroud)

lnm*_*nmx 6

文档中,它表示该XMLName字段必须是类型xml.Name.

type Person struct {
    XMLName xml.Name
    E1 string `xml:"ELEM1"`
    // ...
}
Run Code Online (Sandbox Code Playgroud)

通过以下Local字段设置元素名称xml.Name:

person := Person { 
    XMLName: xml.Name { Local: "Person" },
    // ...
}
Run Code Online (Sandbox Code Playgroud)

(此外,必须导出E1-E4才能包含在XML输出中).

游乐场示例:http://play.golang.org/p/bzSutFF9Bo

  • 相同的XMLName字段适用于xml.Unmarshal:http://play.golang.org/p/8-uDgUHVlg (2认同)