Golang marshal动态xml元素名称

时间:2014-11-11 14:40:15

标签: xml go marshalling 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>

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

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"`
}

1 个答案:

答案 0 :(得分:6)

documentation中,它表示XMLName字段必须是xml.Name类型。

type Person struct {
    XMLName xml.Name
    E1 string `xml:"ELEM1"`
    // ...
}

通过Local的{​​{1}}字段设置元素名称:

xml.Name

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

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