Hi,
wondering how to unmarshall the xml below (also available 
here https://play.golang.org/p/QtZwKmrn8HM) into a tree. The challenge is 
that each element can nest  0 or more *ordered* child elements which can be 
of different types (eg text, group, choose, macro etc). I tried 
unmarshalling into a struct which embed the following type 

type RenderingElement struct {
 Names []Names `xml:"names"`
 Date []Date `xml:"date"`
 Label []Label `xml:"label"`
 Text []Text `xml:"text"`
 Number []Number `xml:"number"`
 Choose []Choose `xml:"choose"`
 Group []Group `xml:"group"`
}

This is simple but the problem is that if an element has children of 
different types eg text and group I have no way of telling their order and 
the order is important (essentially the xml codes for a formatting program).

Any tips or example code on how to unmarshall this xml while retaining its 
nested ordered structure?

Thanks,

const src = `<layout suffix=".">
 <text variable="citation-number" suffix=". "/>
 <group delimiter=", ">
 <text macro="author"/>
 <choose>
 <if type="thesis">
 <group delimiter=" ">
 <group delimiter=", ">
 <group>
 <!-- Always print, even if no university given -->
 <text value="thesis"/>
 </group>
 <text macro="publisher"/>
 </group>
 <text macro="issued" prefix="(" suffix=")"/>
 </group>
 </if>
 <else-if type="bill book graphic legal_case legislation motion_picture 
song chapter paper-conference" match="any">
 <group delimiter=" ">
 <choose>
 <if type="chapter paper-conference" match="any">
 <group delimiter=", ">
 <group delimiter=" ">
 <text term="in"/>
 <text variable="container-title" font-style="italic"/>
 </group>
 <text macro="editor"/>
 </group>
 </if>
 <else>
 <text macro="title"/>
 </else>
 </choose>
 <group prefix="(" suffix=")" delimiter="; ">
 <group delimiter=", ">
 <text macro="publisher"/>
 <text macro="edition"/>
 <text macro="issued"/>
 </group>
 <text variable="URL"/>
 </group>
 </group>
 <group delimiter=" of ">
 <group>
 <label variable="volume" form="short" suffix=" "/>
 <number variable="volume"/>
 </group>
 <text variable="collection-title" font-style="italic"/>
 </group>
 <choose>
 <if type="chapter paper-conference" match="any">
 <text macro="pages"/>
 </if>
 </choose>
 </else-if>
 <else-if type="article-journal">
 <choose>
 <if variable="page">
 <choose>
 <if is-numeric="page" match="none">
 <group>
 <group delimiter=", ">
 <text variable="container-title" form="short" font-style="italic"/>
 <group>
 <text term="in press"/>
 </group>
 </group>
 <text macro="access"> hello </text>
 </group>
 </if>
 <else>
 <text macro="article-details"/>
 </else>
 </choose>
 </if>
 <else>
 <text macro="article-details"/>
 </else>
 </choose>
 </else-if>
 <else-if type="report">
 <group>
 <group delimiter=", ">
 <text variable="title" quotes="true"/>
 <text variable="collection-title" font-style="italic"/>
 </group>
 <group prefix=" (" suffix=")" delimiter=", ">
 <group delimiter=" ">
 <text variable="genre" form="short"/>
 <number variable="number"/>
 </group>
 <text variable="publisher"/>
 <text variable="publisher-place"/>
 <text macro="issued"/>
 </group>
 </group>
 <text macro="pages"/>
 <text macro="access"/>
 </else-if>
 <else>
 <group>
 <group delimiter=", ">
 <text macro="editor"/>
 <group delimiter=". ">
 <text macro="title"/>
 <text form="short" variable="container-title" font-style="italic"/>
 <text variable="volume" font-weight="bold"/>
 </group>
 </group>
 <text macro="issued" prefix=" (" suffix=")"/>
 </group>
 <text macro="pages"/>
 <text macro="access"/>
 </else>
 </choose>
 </group>
 </layout>
`

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/11fea884-cd3f-44a9-b831-339c9cd308f8%40googlegroups.com.

Reply via email to