Go til XML-konverter
Lim inn Go-struct-er. Få ren XML tilbake.
Hva dette verktøyet gjør
Har du noen gang måttet rigge opp en XML-payload som passer til en Go-struct — for en SOAP-klient, en RSS-feed, en gammel SaaS-webhook eller et leverandørsitemap — så vet du hvor pirkete det er. Du kan kalle xml.Marshal selv, men da må du sette sammen main.go, kompilere og se over output med øynene. Lim inn Go-en her i stedet, og du får velformet XML i ett steg. Én struct, en fil med flere, eller en literal du klippet ut fra Go by Example — samme greie: et komplett XML-dokument der hvert felt er bevart.
Det speiler hva pakken encoding/xml faktisk ville produsert. En tag som xml:"OrderId,attr" gjør feltet om til et attributt på forelderen; xml:"-" fjerner det; xml:",omitempty" lar elementet være ute når verdien er null-verdien; xml:"Items>OrderItem" pakker slicen inn i en <Items>-container med ett <OrderItem> per element; xml:",chardata" legger verdien som tekstinnhold. XMLName xml.Name gir nytt navn til selve elementet. Peker-felt med nil sendes ut som tomme elementer kun når ,omitempty mangler — akkurat slik standardbiblioteket oppfører seg.
Skalarer håndteres slik Go ville gjort det: float64 skrives uten vitenskapelig notasjon når det får plass, time.Time bruker RFC 3339, boolske verdier er små true/false, og int/uint kommer ut uten padding. Nestede struct-er blir til nestede elementer. Slicer av struct-er blir til gjentatte elementer på samme nivå. Map-er er ikke nativt støttet av encoding/xml — de flates ut til gjentatte barn <Entry><Key/><Value/></Entry> slik at formen fortsatt gir mening. Skriver du idiomatisk Go? Stilguiden i Effective Go er en god referanse for mønstrene dette verktøyet forventer.
Slik bruker du det
Tre steg. Funker likt enten du limer inn én struct eller en hel package-fil.
Lim inn Go-koden din (eller prøv eksemplet)
Slenge Go-en inn i venstre editor sånn som den er. En enkelt struct-deklarasjon, en hel fil med imports og flere typer, eller en composite literal som order := Order{...} — alt funker. Klikk på Last inn eksempel for et realistisk tilfelle først.
Du trenger ikke fjerne package-linjen, ta bort imports eller rydde opp i fila. Lim den inn slik den kommer ut av gofmt. Struct-tags med backticks er forventet.
Trykk Konverter
Klikk på den grønne Konverter-knappen. Verktøyet leser Go-en, respekterer hver xml-struct-tag og bygger XML-en i én slurk. Du ser en kort laste-indikator mens det går.
Kopier XML-en
Høyre panel fylles med innrykket, velformet XML som en standardkompatibel XML-parser godtar. Kopier inn i SOAP-konvolutten, config-fila, testfixture eller API-dokumentasjonen.
Når dette faktisk hjelper
Bygge SOAP-klient-fixturer
Du prater med et gammelt enterprise SOAP-API fra en Go-tjeneste. Lim inn request-structen, få XML-body-en klar til SoapUI, Postman eller test-suiten.
RSS- og Atom-feeder
En feed-struct med Channel-, Item- og enclosure-felt blir til en fungerende RSS- eller Atom-mal — kjekt for å sjekke tag-oppsettet før du kobler på handleren.
Leverandør-config-filer
Noen SaaS-verktøy spiser fortsatt XML-config (tenk sitemaps, logging-pipelines, gamle ops-konsoller). Lim inn Go-config-structen, slipp XML-en rett videre.
Hold dokumentasjonen ærlig
Generer XML-eksempler til en README eller API-referanse ut fra de faktiske Go-typene, slik at eksemplene aldri driver ut av takt med koden som havner på main.
Vanlige spørsmål
Kan jeg lime inn flere struct-er på én gang?
Ja — lim inn hele fila. Roten oppdages fra composite literalen (f.eks. order := Order{...}) når den finnes, ellers fra den første structen som refererer til de andre. Nestede og søsken-structer kommer gjennom som nestede elementer eller separate fragmenter, så ingenting forsvinner i stillhet.
Respekterer det struct-tags som xml:"x,attr", xml:"-" og xml:",omitempty"?
Ja — og alle de vanlige variantene. xml:"name" gir elementet nytt navn, xml:"name,attr" skriver det som attributt på forelderen, xml:"-" fjerner feltet helt, xml:",omitempty" hopper over felt med null-verdi, xml:"a>b" pakker slicen inn i en <a>-container med ett <b> per element, xml:",chardata" legger verdien som elementtekst, og xml:",innerxml" sendes videre som rå XML. Det samsvarer med oppførselen dokumentert i encoding/xml Marshal-referansen.
Hva med det spesielle XMLName-feltet?
Et felt av typen xml.Name med navnet XMLName gir rot-elementet nytt navn. XMLName xml.Name `xml:"Order"` gir <Order>...</Order>. Uten det bruker verktøyet struct-type-navnet som rot — samme default som xml.Marshal.
Hvordan håndterer det pekere, slicer og map-er?
Peker-felt med nil sender ut et tomt element med mindre ,omitempty er satt — da hoppes de over. Slicer av struct-er blir til gjentatte søsken-elementer (eller pakkes i en container hvis taggen bruker a>b-formen). Map-er håndteres ikke nativt av encoding/xml, så verktøyet sender dem ut som en serie barn <Entry><Key/><Value/></Entry> — bra nok i de fleste tilfeller, og tydelig nok til å redigere om du vil ha en annen form.
Lagres koden min?
Koden sendes til backenden for konvertering og blir ikke persistert — vi logger ikke payloaden. Standardadvarsel for nettverktøy: er koden virkelig sensitiv, ta en kikk på den før du limer inn.
Hva om structen bruker typer encoding/xml ikke støtter — channels, funcs, complex?
De sendes ut som tomme elementer i stedet for å velte hele konverteringen, på linje med hva xml.Marshal ville gjort i runtime (den returnerer en feil; verktøyet går videre slik at du i det minste får resten). Har selve Go-en en syntaksfeil, fiks de åpenbare først — parseren er raus, men ikke en fullverdig gc.
Andre verktøy du kan få bruk for
Go til XML er bare én brikke i puslespillet. Disse verktøyene passer godt sammen med det: