Go zu XML Konverter
Go-Structs einfügen. Sauberes XML zurückbekommen.
Was dieses Tool macht
Wer schon mal ein XML-Payload zusammengebaut hat, das zu einem Go-Struct passt — für einen SOAP-Client, einen RSS-Feed, einen Legacy-SaaS-Webhook oder ein Vendor-Sitemap — weiß, wie fummelig das ist. Du kannst xml.Marshal selbst aufrufen, aber dann heißt es main.go basteln, kompilieren und die Ausgabe per Auge prüfen. Füge das Go stattdessen hier ein und du bekommst in einem Schritt wohlgeformtes XML. Ein Struct, eine Datei mit mehreren, oder ein Literal, das du aus Go by Example kopiert hast — immer dasselbe: ein vollständiges XML-Dokument, in dem jedes Feld erhalten bleibt.
Das Verhalten entspricht dem, was das Paket encoding/xml tatsächlich erzeugen würde. Ein Tag wie xml:"OrderId,attr" macht aus dem Feld ein Attribut am Elternelement; xml:"-" lässt es weg; xml:",omitempty" überspringt das Element, wenn der Wert der Zero-Wert ist; xml:"Items>OrderItem" packt den Slice in einen <Items>-Container mit je einem <OrderItem> pro Element; xml:",chardata" setzt den Wert als Textinhalt. XMLName xml.Name benennt das Element selbst um. Pointer-Felder mit nil werden nur als leere Elemente ausgegeben, wenn ,omitempty fehlt — genau so wie die Standardbibliothek es macht.
Skalare werden so behandelt, wie Go sie behandeln würde: float64 kommt ohne wissenschaftliche Notation raus, wenn es passt, time.Time nutzt RFC 3339, Booleans sind true/false in Kleinbuchstaben, und int/uint ohne Padding. Verschachtelte Structs werden zu verschachtelten Elementen. Slices von Structs werden zu wiederholten Elementen auf derselben Ebene. Maps werden von encoding/xml nicht nativ unterstützt — sie werden zu wiederholten <Entry><Key/><Value/></Entry>-Kindern abgeflacht, damit die Form lesbar bleibt. Schreibst du idiomatisches Go? Der Styleguide in Effective Go ist eine gute Referenz für die Patterns, die dieses Tool erwartet.
So benutzt du es
Drei Schritte. Funktioniert gleich, ob du einen Struct oder eine ganze Package-Datei einfügst.
Dein Go einfügen (oder das Beispiel ausprobieren)
Wirf dein Go einfach so in den linken Editor. Eine einzelne Struct-Deklaration, eine komplette Datei mit Imports und mehreren Typen, oder ein Composite Literal wie order := Order{...} — alles läuft. Klicke auf Beispiel laden für einen realistischen Einstieg.
Du musst weder die package-Zeile entfernen noch Imports aufräumen oder die Datei polieren. Füge sie ein, wie sie aus gofmt kommt. Struct-Tags mit Backticks sind erwartet.
Konvertieren drücken
Klicke auf den grünen Konvertieren-Button. Das Tool liest das Go, respektiert jeden xml-Struct-Tag und baut das XML in einem Rutsch. Während der Ausführung siehst du kurz einen Ladeindikator.
Das XML kopieren
Das rechte Panel füllt sich mit eingerücktem, wohlgeformtem XML, das jeder standardkonforme XML-Parser akzeptiert. Kopiere es in deine SOAP-Envelope, Config-Datei, Test-Fixture oder API-Doku.
Wann das wirklich hilft
SOAP-Client-Fixtures bauen
Du sprichst aus einem Go-Service mit einer Legacy-Enterprise-SOAP-API. Füge den Request-Struct ein, bekomme den XML-Body fertig für SoapUI, Postman oder die Testsuite.
RSS- und Atom-Feeds
Ein Feed-Struct mit Channel-, Item- und Enclosure-Feldern wird zu einem funktionierenden RSS- oder Atom-Template — praktisch, um Tag-Layout zu checken, bevor du den Handler verdrahtest.
Vendor-Config-Dateien
Manche SaaS-Tools fressen noch XML-Config (Sitemaps, Logging-Pipelines, alte Ops-Konsolen). Füge den Go-Config-Struct ein und nimm das XML direkt.
Dokumentation ehrlich halten
Generiere XML-Beispiele für ein README oder eine API-Referenz aus den echten Go-Typen, damit die Beispiele nie vom Code abdriften, der in main landet.
Häufige Fragen
Kann ich mehrere Structs auf einmal einfügen?
Ja — füge die ganze Datei ein. Die Wurzel wird aus dem Composite Literal erkannt (z. B. order := Order{...}), wenn vorhanden, sonst aus dem ersten Struct, der die anderen referenziert. Verschachtelte und Geschwister-Structs kommen als verschachtelte Elemente oder separate Fragmente durch, nichts fällt still unter den Tisch.
Werden Struct-Tags wie xml:"x,attr", xml:"-" und xml:",omitempty" respektiert?
Ja — und alle gängigen Varianten. xml:"name" benennt das Element um, xml:"name,attr" gibt es als Attribut am Elternelement aus, xml:"-" entfernt das Feld komplett, xml:",omitempty" überspringt Felder mit Zero-Wert, xml:"a>b" packt den Slice in einen <a>-Container mit einem <b> pro Element, xml:",chardata" setzt den Wert als Elementtext, und xml:",innerxml" wird als rohes XML durchgereicht. Entspricht dem in der encoding/xml Marshal-Referenz dokumentierten Verhalten.
Was ist mit dem speziellen XMLName-Feld?
Ein Feld vom Typ xml.Name namens XMLName benennt das Wurzelelement um. XMLName xml.Name `xml:"Order"` erzeugt <Order>...</Order>. Ohne es nutzt das Tool den Struct-Typnamen als Wurzel — derselbe Default wie bei xml.Marshal.
Wie geht es mit Pointern, Slices und Maps um?
Pointer-Felder mit nil erzeugen ein leeres Element, außer ,omitempty ist gesetzt, dann werden sie übersprungen. Slices von Structs werden zu wiederholten Geschwister-Elementen (oder in einen Container gepackt, wenn der Tag die Form a>b hat). Maps werden von encoding/xml nicht nativ unterstützt, daher gibt das Tool sie als Folge von <Entry><Key/><Value/></Entry>-Kindern aus — für die meisten Fälle ausreichend und explizit genug, um bei Bedarf eine andere Form zu editieren.
Wird mein Code gespeichert?
Dein Code geht zum Konvertieren an das Backend und wird nicht persistiert — wir loggen das Payload nicht. Standardhinweis für Online-Tools: Wenn der Code wirklich sensibel ist, schau ihn dir vor dem Einfügen lieber nochmal an.
Was, wenn der Struct Typen nutzt, die encoding/xml nicht unterstützt — channels, funcs, complex?
Sie werden als leere Elemente ausgegeben, statt die ganze Konvertierung scheitern zu lassen — angelehnt an das, was xml.Marshal zur Laufzeit tun würde (es liefert einen Fehler; das Tool macht weiter, damit du zumindest den Rest bekommst). Hat das Go selbst einen Syntaxfehler, fix zuerst die offensichtlichen — der Parser ist gutmütig, aber kein vollständiger gc.
Weitere Tools, die du brauchen könntest
Go zu XML ist nur ein Teil des Puzzles. Diese Tools passen gut dazu: