我希望能够标记我的结构,而不需要知道它将嵌套到XML文档中的级别。换句话说,我希望能够写下:
type Elem struct {
Datum string `xml:"datum"`
}
让它适用于两者
<elem>
<datum>Hello</datum>
</elem>
并且
<list>
<elem>
<datum>Hello</datum>
</elem>
</list>
但是,为了让后一个示例正常工作(尝试解码为[]Elem
时),我需要使用标记xml:"elem>datum"
,该标记对第一个示例进行了错误解码。有没有办法让我在不知道如何嵌入结构的情况下定义XML标记?请看这里一个简单的例子:
答案 0 :(得分:1)
解决这个问题的一种方法是使用匿名结构:
func Test2_DecodeList() {
xmlData := "<list><elem><datum>Hello</datum></elem></list>"
var list struct {
Elems []Elem `xml:"elem"`
}
if err := xml.Unmarshal([]byte(xmlData), &list); err != nil {
fatal("Test2:", err)
}
if err := expectEq(1, len(list.Elems)); err != nil {
fatal("Test2:", err)
}
if err := expectEq("Hello", list.Elems[0].Datum); err != nil {
fatal("Test2:", err)
}
}