2015-03-02 19 views
5

「米試圖加載包含混合元素的無界序列(在XSD的序列的選擇)的XML文件 文件看起來像這樣:如何將混合元素的xml序列映射到go結構?

<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類型的元素?更一般地說,將一個混合元素列表映射到一個去結構的最佳方式是什麼?

回答

4

您可以在根節點上使用xml:",any"標記,然後解組,其餘爲有一個XMLName場這樣的結構:

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

type Element struct { 
    XMLName xml.Name 
} 

更多關於xml:",any"XMLNamehere

遊樂場示例:http://play.golang.org/p/Vl9YI8GG1E

+0

好戲!謝謝! – 2017-03-17 10:07:44