2015-03-02 19 views
5

karışık unsurların bir sınırsız dizisini (XSD bir dizide bir seçim) içeren bir XML dosyası yüklemek için çalışıyorum dosya benziyor':Karışık bir öğelerin xml dizisini bir go yapısına nasıl eşlenir?

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

Ben başlatmak için xml.Unmarshal kullanmak ve bu yapılar doldurmak:

type RootNode struct { 
    ElementA []ElementA 
    ElementB []ElementB 
    ElementC []ElementC 
} 

type ElementA struct { 
} 

type ElementB struct { 
} 

type ElementC struct { 
} 

Ben exemple burada http://play.golang.org/p/ajIReJS35F çalışma var. Sorun, orijinal dizideki öğelerin dizinini bilmem gerektiğidir. Ve bu açıklama ile, bu bilgi kaybolur.

Aynı dizide ElementA, ElementB veya ElementC öğelerini yüklemek için bir yol var mı? Daha genel olarak, karışık öğeler listesinin bir go yapısına eşlenmesinin en iyi yolu nedir?

cevap

4

Böyle bir XMLName alanı var yapılar içine kalanı unmarshal ardından kök düğümde xml:",any" etiketi kullanabilir ve: xml:",any" ve XMLNamehere üzerinde

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

type Element struct { 
    XMLName xml.Name 
} 

Daha.

Bahçesi örneği: http://play.golang.org/p/Vl9YI8GG1E

+0

Nice trick! Teşekkürler! –