Go til XML-konverter
Indsæt Go-structs. Få ren XML tilbage.
Hvad værktøjet gør
Har du nogensinde skullet samle et XML-payload, der passer til en Go-struct — til en SOAP-klient, et RSS-feed, en gammel SaaS-webhook eller en vendor-sitemap — så ved du godt, hvor fedtet det er. Du kan kalde xml.Marshal selv, men så skal der hankes i main.go, kompileres og kigges på outputtet med øjnene. Indsæt Go'en her i stedet, og du får velformet XML i ét hug. Én struct, en fil med flere eller en literal, du har klippet fra Go by Example — samme sag: et komplet XML-dokument med alle felter bevaret.
Det spejler, hvad pakken encoding/xml faktisk ville producere. Et tag som xml:"OrderId,attr" gør feltet til en attribut på forælderen; xml:"-" smider det ud; xml:",omitempty" udelader elementet, når værdien er nulværdien; xml:"Items>OrderItem" pakker slicen ind i en <Items>-container med ét <OrderItem> pr. element; xml:",chardata" lægger værdien som tekstindhold. XMLName xml.Name omdøber selve elementet. Pointer-felter med nil udsendes kun som tomme elementer, når ,omitempty mangler — præcis som standardbiblioteket opfører sig.
Skalarer håndteres, som Go ville håndtere dem: float64 skrives uden videnskabelig notation, når det kan være der, time.Time bruger RFC 3339, booleans er små true/false, og int/uint kommer ud uden padding. Nestede structs bliver til nestede elementer. Slices af structs bliver til gentagne elementer på samme niveau. Map's er ikke nativt understøttet af encoding/xml — de flades ud til gentagne børn <Entry><Key/><Value/></Entry>, så formen stadig giver mening. Skriver du idiomatisk Go? Stilguiden i Effective Go er en god reference for de mønstre, værktøjet forventer.
Sådan bruger du det
Tre skridt. Virker ens, om du indsætter én struct eller en hel package-fil.
Indsæt dit Go (eller prøv eksemplet)
Smid dit Go i venstre editor, som det er. En enkelt structdeklaration, en hel fil med imports og flere typer, eller en composite literal som order := Order{...} — det hele virker. Klik på Indlæs eksempel for et realistisk tilfælde først.
Du behøver ikke fjerne package-linjen, droppe imports eller rydde op i filen. Indsæt den, som den kommer ud af gofmt. Structtags med backticks er forventet.
Tryk Konverter
Klik på den grønne Konverter-knap. Værktøjet læser Go'en, respekterer hvert xml-structtag og bygger XML'en i én runde. Der kommer en kort loading-indikator, mens det kører.
Kopier XML'en
Højre panel fyldes med indrykket, velformet XML, som en standardkompatibel XML-parser accepterer. Kopier ind i din SOAP-konvolut, config-fil, testfixture eller API-dokumentation.
Hvornår det virkelig hjælper
Bygge SOAP-klientfixturer
Du snakker med et legacy enterprise SOAP-API fra en Go-service. Indsæt request-structen, få XML-bodyen klar til SoapUI, Postman eller testsuiten.
RSS- og Atom-feeds
En feed-struct med Channel-, Item- og enclosure-felter bliver til en fungerende RSS- eller Atom-skabelon — handy til at tjekke tag-layoutet, før du kobler handleren på.
Leverandør-configfiler
Nogle SaaS-værktøjer spiser stadig XML-config (tænk sitemaps, logging-pipelines, gamle ops-konsoller). Indsæt Go-config-structen, smid XML'en direkte videre.
Hold dokumentationen ærlig
Generer XML-eksempler til en README eller API-reference ud fra de rigtige Go-typer, så eksemplerne aldrig bliver ude af trit med koden, der lander i main.
Almindelige spørgsmål
Kan jeg indsætte flere structs på én gang?
Ja — indsæt hele filen. Roden opdages fra composite literalen (fx order := Order{...}) når den er der, ellers fra den første struct, der refererer til de andre. Nestede og søskende-structs kommer igennem som nestede elementer eller separate fragmenter, så intet forsvinder i stilhed.
Respekterer det structtags som xml:"x,attr", xml:"-" og xml:",omitempty"?
Ja — og alle de almindelige varianter. xml:"name" omdøber elementet, xml:"name,attr" skriver det som attribut på forælderen, xml:"-" fjerner feltet helt, xml:",omitempty" springer felter med nulværdi over, xml:"a>b" pakker slicen ind i en <a>-container med ét <b> pr. element, xml:",chardata" lægger værdien som elementtekst, og xml:",innerxml" sendes videre som rå XML. Det matcher opførslen, der er dokumenteret i encoding/xml Marshal-referencen.
Hvad med det særlige XMLName-felt?
Et felt af typen xml.Name med navnet XMLName omdøber rodelementet. XMLName xml.Name `xml:"Order"` giver <Order>...</Order>. Uden det bruger værktøjet structtypens navn som rod — samme default som xml.Marshal.
Hvordan håndterer det pointere, slices og maps?
Pointer-felter med nil giver et tomt element, medmindre ,omitempty er sat — så springes de over. Slices af structs bliver til gentagne søskende-elementer (eller pakkes ind i en container, hvis taggen bruger a>b-formen). Maps håndteres ikke nativt af encoding/xml, så værktøjet udsender dem som en serie af børn <Entry><Key/><Value/></Entry> — godt nok i de fleste tilfælde, og tydeligt nok til, at du kan rette det til en anden form, hvis du vil.
Bliver min kode gemt?
Din kode sendes til backenden for konvertering og lagres ikke — vi logger ikke payloaden. Standard-disclaimer for online-værktøjer: hvis koden er rigtig følsom, så kig den igennem, inden du indsætter.
Hvad hvis structen bruger typer, encoding/xml ikke understøtter — channels, funcs, complex?
De udsendes som tomme elementer i stedet for at vælte hele konverteringen, på linje med, hvad xml.Marshal ville gøre i runtime (den returnerer en fejl; værktøjet kører videre, så du i det mindste får resten). Hvis selve Go'en har en syntaksfejl, så ret de åbenlyse først — parseren er overbærende, men ikke en fuld gc.
Andre værktøjer, du kan få brug for
Go til XML er kun én brik i puslespillet. Disse værktøjer passer godt til det: