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.