Plak Go links en klik op "Converteren" — wij maken er XML vanPlak Go-code

Wat deze tool doet

Als je ooit een XML-payload in elkaar hebt moeten zetten die past bij een Go-struct — voor een SOAP-client, een RSS-feed, een legacy SaaS-webhook of een vendor-sitemap — dan weet je hoe gepriegel dat is. Je kunt xml.Marshal zelf aanroepen, maar dat betekent main.go in elkaar zetten, compileren en met het oog de output nalopen. Plak het Go hier in plaats daarvan en je krijgt in één stap welgevormde XML terug. Eén struct, een bestand met meerdere, of een literal die je uit Go by Example hebt geplakt — zelfde verhaal: een compleet XML-document met elk veld behouden.

Het spiegelt wat het pakket encoding/xml daadwerkelijk zou produceren. Een tag als xml:"OrderId,attr" maakt van het veld een attribuut op de parent; xml:"-" gooit het weg; xml:",omitempty" laat het element weg als de waarde de zero value is; xml:"Items>OrderItem" verpakt de slice in een <Items>-container met één <OrderItem> per element; xml:",chardata" zet de waarde als tekstinhoud. XMLName xml.Name hernoemt het element zelf. Pointer-velden met nil komen alleen als lege elementen naar buiten als ,omitempty ontbreekt — precies zoals de standard library zich gedraagt.

Scalars worden behandeld zoals Go ze zou behandelen: float64 komt zonder wetenschappelijke notatie naar buiten als dat past, time.Time gebruikt RFC 3339, booleans zijn true/false in kleine letters, en int/uint zonder padding. Geneste structs worden geneste elementen. Slices van structs worden herhaalde elementen op hetzelfde niveau. Maps worden niet native ondersteund door encoding/xml — ze worden afgevlakt tot herhaalde <Entry><Key/><Value/></Entry>-kinderen zodat de vorm leesbaar blijft. Schrijf je idiomatisch Go? De stijlgids in Effective Go is een goede referentie voor de patronen die deze tool verwacht.

Zo gebruik je het

Drie stappen. Werkt hetzelfde of je nu één struct of een heel package-bestand plakt.

1

Plak je Go (of probeer het voorbeeld)

Kieper je Go zoals het is in de linker-editor. Eén struct-declaratie, een heel bestand met imports en meerdere types, of een composite literal zoals order := Order{...} — allemaal oké. Klik eerst op Voorbeeld laden voor een realistisch geval.

Je hoeft de package-regel niet weg te halen, imports niet te verwijderen en het bestand niet op te schonen. Plak het zoals gofmt het oplevert. Struct-tags met backticks zijn verwacht.

2

Druk op Converteren

Klik op de groene Converteren-knop. De tool leest het Go, respecteert elke xml-structtag en bouwt de XML in één keer. Tijdens het draaien zie je kort een laadindicator.

3

Kopieer de XML

Het rechter-paneel vult zich met ingesprongen, welgevormde XML die een standaardcompatibele XML-parser accepteert. Kopieer het in je SOAP-envelop, config-bestand, test-fixture of API-documentatie.

Wanneer dit echt handig is

SOAP-client-fixtures bouwen

Je praat vanuit een Go-service met een legacy enterprise SOAP API. Plak de request-struct, krijg het XML-body klaar voor SoapUI, Postman of de testsuite.

RSS- en Atom-feeds

Een feed-struct met Channel-, Item- en enclosure-velden wordt een werkend RSS- of Atom-template — handig om de tag-lay-out te checken voordat je de handler aansluit.

Vendor-config-bestanden

Sommige SaaS-tools eten nog steeds XML-config (denk aan sitemaps, logging-pipelines, oude ops-consoles). Plak de Go-config-struct en stort de XML er direct in.

Documentatie eerlijk houden

Genereer XML-voorbeelden voor een README of API-referentie uit de echte Go-types, zodat de voorbeelden nooit uit de pas lopen met de code die in main belandt.

Veelgestelde vragen

Kan ik meerdere structs tegelijk plakken?

Ja — plak het hele bestand. De root wordt gedetecteerd uit het composite literal (bijv. order := Order{...}) als dat er is, of uit de eerste struct die naar de andere verwijst. Geneste en zuster-structs komen door als geneste elementen of losse fragmenten, dus niks verdwijnt stilletjes.

Respecteert het struct-tags als xml:"x,attr", xml:"-" en xml:",omitempty"?

Ja — en alle gangbare varianten. xml:"name" hernoemt het element, xml:"name,attr" gooit het als attribuut op de parent, xml:"-" verwijdert het veld volledig, xml:",omitempty" slaat velden met zero value over, xml:"a>b" verpakt de slice in een <a>-container met één <b> per element, xml:",chardata" zet de waarde als elementtekst, en xml:",innerxml" wordt doorgegeven als rauwe XML. Komt overeen met het gedrag dat in de encoding/xml Marshal-referentie gedocumenteerd staat.

En het speciale XMLName-veld?

Een veld van het type xml.Name met de naam XMLName hernoemt het root-element. XMLName xml.Name `xml:"Order"` levert <Order>...</Order> op. Zonder dit gebruikt de tool de typenaam van de struct als root — dezelfde default als xml.Marshal.

Hoe gaat het om met pointers, slices en maps?

Pointer-velden met nil leveren een leeg element op tenzij ,omitempty is gezet — dan worden ze overgeslagen. Slices van structs worden herhaalde zuster-elementen (of verpakt in een container als de tag de a>b-vorm gebruikt). Maps worden niet native afgehandeld door encoding/xml, dus de tool levert ze als een reeks <Entry><Key/><Value/></Entry>-kinderen — voldoende voor de meeste gevallen, en expliciet genoeg om aan te passen als je een andere vorm nodig hebt.

Wordt mijn code opgeslagen?

Je code wordt naar de backend gestuurd voor de conversie en wordt niet bewaard — we loggen de payload niet. Standaardwaarschuwing voor online tools: is de code écht gevoelig, kijk er dan nog even naar voordat je plakt.

Wat als de struct types gebruikt die encoding/xml niet ondersteunt — channels, funcs, complex?

Die worden als lege elementen uitgespuwd in plaats van de hele conversie te laten falen, in lijn met wat xml.Marshal op runtime zou doen (dat geeft een error; de tool gaat door zodat je de rest toch krijgt). Heeft het Go zelf een syntaxfout, fix eerst de voor de hand liggende — de parser is coulant maar geen volledige gc.

Andere tools die je kunt gebruiken

Go naar XML is maar een stukje van de puzzel. Deze tools passen er goed bij: