正在尝试加载包含无限制的混合元素序列(在XSD中选择序列)的XML文件
该文件如下所示:

<RootNode>
    <ElementB>...</ElementB>
    <ElementA>...</ElementA>
    <ElementA>...</ElementA>
    <ElementC>...</ElementC>
    <ElementB>...</ElementB>
    <ElementA>...</ElementA>
    <ElementB>...</ElementB>
</RootNode>

我使用xml.Unmarshal初始化并填充以下结构:
type RootNode struct {
    ElementA []ElementA
    ElementB []ElementB
    ElementC []ElementC
}

type ElementA struct {
}

type ElementB struct {
}

type ElementC struct {
}

我的工作示例是http://play.golang.org/p/ajIReJS35F
问题是我需要知道原始序列中元素的索引。有了该描述,该信息就会丢失。

有没有办法在同一数组中加载ElementA,ElementB或ElementC类型的元素?更一般而言,将混合元素列表映射到go结构的最佳方法是什么?

最佳答案

您可以在根节点上使用xml:",any"标记,然后将其余部分解编为具有XMLName字段的结构,如下所示:

type RootNode struct {
    Elements []Element `xml:",any"`
}

type Element struct {
    XMLName xml.Name
}

有关xml:",any"XMLName here的更多信息。

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

10-04 23:01