与上下文无关的XML结构标记

时间:2014-10-22 00:42:03

标签: go

我希望能够标记我的结构,而不需要知道它将嵌套到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标记?请看这里一个简单的例子:

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

1 个答案:

答案 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)
    }
}

示例:http://play.golang.org/p/UyYoyGgL_K