Ruby-zu-XML-Konverter
Ruby-Klassen oder -Objekte reinpacken. Sauberes XML raus.
Was dieses Tool macht
Wer schon mal von Hand ein XML-Payload passend zu einer Ruby-Klasse basteln musste — vielleicht für ein Rails to_xml-Fixture, einen alten SOAP-Call oder ein Nokogiri-Builder-Template — weiß, wie schnell sich der Boilerplate aufstapelt. Ruby hier reinpacken und das Tool liefert dir in einem Rutsch wohlgeformtes XML. Eine attr_accessor-Klasse, ein Struct.new, eine komplette Modell-Datei oder tief verschachtelte Objekte — Ergebnis ist gleich: ein vollständiges XML-Dokument mit jedem Feld.
Das ist nicht bloß String-Ersetzung. Der Konverter versteht, wie Ruby-Werte wirklich serialisieren: BigDecimal("49.99") kommt als schlichter Zahlen-String raus (keine wissenschaftliche Notation), Time und DateTime werden als ISO-8601-Strings gerendert, Symbol-Werte verlieren den führenden Doppelpunkt, nil wird zu einem leeren Element statt wegzufallen, und Arrays werden Container-Elemente mit einem Kind pro Eintrag — genau das, was Nokogiri::XML::Builder und Rails to_xml normalerweise produzieren.
Die Klassenstruktur wird auch respektiert. Jede Top-Level-Klasse wird zu einem Root-Element, das nach der Klasse heißt (in snake_case), attr_accessor-Symbole werden zu Kindelementen, verschachtelte Objekte werden inline aufgeklappt, und Arrays von OrderItem werden zu einem <items>-Wrapper mit einem <order_item>-Kind pro Eintrag. Hashes werden zu Key/Value-Kindelementen. Geerbte Attribute kommen mit durch. Wenn du ein Rails-Modell oder ein simples PORO reinpackst, sieht das Ergebnis aus wie das, was render xml: oder REXML::Document.new (siehe REXML) dir geben würden — nur ohne den ganzen Zinnober.
So nutzt du es
Drei Schritte. Selber Ablauf, egal ob du einen einzelnen Struct reinpackst oder einen ganzen lib-Ordner.
Ruby reinpacken (oder das Beispiel probieren)
Ruby einfach so in den linken Editor werfen. Eine attr_accessor-Klasse, eine Struct.new-Kurzschreibweise, mehrere Klassen oder eine befüllte Instanz — alles passt. Auf Beispiel laden klicken, um vorher ein realistisches Order-Beispiel zu sehen.
Du musst keine require-Zeilen entfernen, keine Module rausschneiden und die Syntax nicht vereinfachen. Lass den Code so, wie er im Editor aussieht. Einfach reinpacken.
Konvertieren drücken
Auf den grünen Konvertieren-Button klicken. Das Tool liest das Ruby, behält jede Klasse und jedes Attribut, und baut das XML in einem Rutsch. Während der Verarbeitung läuft ein kurzer Schimmer.
XML kopieren
Rechts füllt sich das Panel mit eingerücktem, wohlgeformtem XML, das jeder standardkonforme Parser frisst. Ab in einen SOAP-Request, eine Fixture-Datei für RSpec, einen Rails-Integrationstest oder deine API-Doku.
Wann das wirklich was bringt
Nokogiri- oder Builder-Fixtures bauen
Du hast eine Ruby-Klasse und brauchst ein XML-Template für Nokogiri::XML::Builder oder ein ERB-Template. Klasse reinpacken, XML nehmen, in deinen Builder-Block packen — fertig.
Rails-to_xml-Seed-Daten
Ein ActiveRecord-Modell oder PORO mit 20 Attributen wird zu einer sofort editierbaren XML-Seed-Datei — für deine Integrationstests oder ein externes System, das immer noch XML frisst.
Alte SOAP-Integrationen
Ein Ruby-Client, der mit einem alten SOAP/XML-RPC-Service redet, braucht einen Request-Body, der zu einer Ruby-Klasse passt. Modell reinpacken, XML-Envelope-Form abgreifen und aufhören, mit <a href="https://www.ruby-doc.org/" target="_blank" rel="noopener">Savon</a>-Templates zu kämpfen.
Doku und Code im Gleichschritt halten
XML-Response-Beispiele für ein README, eine API-Referenz oder XSD-gestützte Doku direkt aus den echten Ruby-Modellen erzeugen — dann driftet die Doku nie vom Code weg.
Häufige Fragen
Kann ich mehrere Klassen auf einmal reinpacken?
Ja — pack eine ganze lib-Datei rein. Jede Top-Level-Klasse kommt mit ausgeklappten verschachtelten Klassen und eingerollten Superklassen-Attributen raus. Mixins werden so behandelt, als würden sie ihre attr_accessor beisteuern. Nichts wird heimlich fallengelassen.
Funktioniert die Struct.new-Kurzschreibweise?
Ja. Order = Struct.new(:order_id, :customer_name, :total_amount) wird wie eine Klasse mit den passenden attr_accessor behandelt. Keyword-Structs (Struct.new(:a, keyword_init: true)) gehen auch — das resultierende XML ist in beiden Fällen identisch.
Wie werden BigDecimal, Time, Symbol und nil behandelt?
BigDecimal("49.99") wird zum simplen String 49.99 (keine wissenschaftliche Notation, kein nachgestelltes bd-Marker). Time, DateTime und Date werden als ISO-8601-Strings gerendert. Symbol-Werte verlieren den Doppelpunkt und werden zu Plain-Text. nil wird zu einem leeren Element (<field/>), statt zu verschwinden — so bleibt die XML-Form konsistent.
Was ist mit Arrays, Hashes und verschachtelten Objekten?
Arrays werden zu Container-Elementen — items = [OrderItem.new, OrderItem.new] wird zu <items><order_item/><order_item/></items>, ein Kind pro Eintrag, benannt nach der Elementklasse. Hashes werden zu <entry><key/><value/></entry>-Paaren. Verschachtelte Objekte werden inline als Kindelemente aufgeklappt — genau wie Rails to_xml das macht.
Wird mein Code gespeichert?
Dein Code wird zur Konvertierung ans Backend geschickt und nicht persistiert — wir loggen das Payload nicht. Wie immer bei Online-Tools: wenn das Ruby echt sensible Literale enthält (API-Keys, Kunden-PII), vorher rausnehmen.
Was ist mit Metaprogrammierung oder define_method?
Alles, was nur zur Laufzeit existiert (Methoden via define_method, über method_missing gesetzte Attribute, reingemixte Module mit berechneten Attrs), kann aus rein statischem Code nicht abgeleitet werden. Das Tool liest deklarierte attr_accessor, attr_reader, Struct-Felder und explizite Zuweisungen. Wenn ein Feld nur über Metaprogrammierung auftaucht, list es als attr_accessor, damit der Konverter es sieht.
Andere Tools, die du brauchen könntest
Ruby zu XML ist ein Baustein. Diese passen gut dazu: