Python zu XML Konverter
Füge eine Python-Klasse, ein dict oder eine dataclass ein. Bekomme sauberes XML zurück.
Was das Tool macht
Wenn du jemals ein XML-Payload von Hand zusammenbauen musstest, das eine Python-Klasse spiegelt — für einen SOAP-Endpoint, eine Config-Datei, eine Legacy-Integration oder ein Test-Fixture — kennst du das Spiel: eine Stunde mit xml.etree.ElementTree kämpfen, dann merken, dass du ein verschachteltes Feld vergessen hast. Füg stattdessen das Python hier ein, und du bekommst in einem Durchgang wohlgeformtes XML zurück. Ein einfaches dict, eine dataclass, ein Pydantic-Modell oder etwas tief Verschachteltes — das Ergebnis ist dasselbe.
Das ist kein dummes String-Replace. Der Konverter versteht, wie Python-Werte tatsächlich auf XML abgebildet werden: Decimal("49.99") wird zu reinem numerischem Text, datetime und date kommen als ISO-8601-Strings raus, UUID wird zum Standard-8-4-4-4-12-Hex-String, Optional[...]-Felder mit None-Werten werden zu leeren Elementen, statt wegzufallen, und list[T] oder List[T] werden zu Container-Elementen mit einem Kind pro Item, benannt nach dem Item-Typ — genau die Form, die Libraries wie xmltodict oder lxml liefern würden.
Type Hints werden ebenfalls berücksichtigt. @dataclass-Feldnamen werden zu Elementnamen. Field(alias="x") auf Pydantic-Modellen benennt das Element um. field(metadata={"xml": "attribute"}) auf einer dataclass schiebt den Wert auf ein Attribut statt auf ein Kindelement. Private Felder, die mit _ beginnen, fliegen raus. Wenn du mehrere Klassen einfügst, landet jede in der Ausgabe mit expandierten verschachtelten Typen und übernommenen ererbten Attributen. Nichts wird stillschweigend verschluckt — wenn ein Feld da ist, taucht es im XML auf.
So benutzt du es
Drei Schritte. Läuft gleich, egal ob du ein fünfzeiliges dict oder ein ganzes models.py einfügst.
Python einfügen (oder das Beispiel ausprobieren)
Wirf dein Python so wie es ist in den linken Editor. Ein dict-Literal, eine dataclass, ein Pydantic BaseModel, verschachtelte Klassen oder eine Instanz-Zuweisung — alles okay. Klick auf Load Sample, wenn du erst ein realistisches Order / OrderItem / Address-Beispiel sehen willst.
Lass Imports, Decorators und Type Hints drin. Du musst sie nicht rausnehmen — der Parser liest die typing-Annotationen und nutzt sie, um die Ausgabetypen zu entscheiden.
Convert drücken
Klick auf den grünen Convert-Button. Das Tool liest das Python, behält jede Klasse und jedes Attribut und spuckt das XML in einem Durchgang aus. Während es läuft, erscheint kurz ein Lade-Indikator.
XML kopieren
Das rechte Panel füllt sich mit eingerücktem, wohlgeformtem XML, das jeder standardkonforme XML-Parser akzeptiert. Kopier es direkt in deinen SOAP-Request, deine Config-Datei, dein Test-Fixture oder deine Docs.
Wann das wirklich hilft
SOAP- / Legacy-Integrations-Fixtures
Du hast ein Pydantic-Request-Modell und brauchst einen XML-Body, den du an einen Legacy-SOAP-Service schickst. Modell einfügen, XML nehmen, in den Test-Runner pasten — fertig.
dataclasses in Config umwandeln
Eine Settings-dataclass mit 30 Feldern wird zu einer editierbaren XML-Config-Vorlage für jeden XML-basierten Settings-Store — kein handgeschriebenes Gerüst, keine Tippfehler.
XSD-Docs ehrlich halten
Generier XML-Beispiele für dein README, deine API-Referenz oder XSD-gestützte Schema-Dokus direkt aus den tatsächlichen Modellen im Code, damit die Beispiele nie von der Realität abweichen.
Integrationstests seeden
Wandle Instanz-Literale aus deinen pytest-Fixtures in XML-Seed-Dateien für Systeme um, die immer noch XML sprechen — Legacy-APIs, Mock-Server oder XSLT-Pipelines.
Häufige Fragen
Funktioniert es mit dataclasses, Pydantic und einfachen dicts?
Ja, alle drei. Feldnamen von @dataclass und Pydantic BaseModel werden als Elementnamen verwendet. Einfache dict-Literale gehen auch — die Keys werden zu Elementnamen und die Werte werden je nach Typ ausgegeben. Verschachtelte Modelle oder dicts werden als verschachtelte Elemente expandiert.
Wie werden Decimal, datetime und UUID behandelt?
Decimal("49.99") wird zu 49.99 als Elementtext. datetime, date und time kommen als ISO-8601-Strings raus. UUID wird zum Standard-8-4-4-4-12-Hex-String. Enum-Unterklassen geben ihren .value aus. set wird zu einem Container-Element wie Listen.
Was ist mit Optional[...] und None-Werten?
Felder mit None-Wert werden als leere Elemente (<field/>) geschrieben, statt wegzufallen — die Ausgabeform bleibt konsistent, was wichtig ist, wenn ein nachgelagertes XSD voraussetzt, dass das Element vorhanden ist.
Kann ich Elemente umbenennen oder Felder auf Attribute schieben?
Ja. Bei Pydantic-Modellen benennt Field(alias="x") das Element um. Bei dataclasses schiebt field(metadata={"xml": "attribute"}) das Feld auf ein Attribut des Parents, und metadata={"xml": "name", ...} benennt es um. Private Felder mit Unterstrich-Präfix (_cache, _tmp) werden standardmäßig verworfen.
Kann ich mehrere Klassen auf einmal einfügen?
Ja — füg ein komplettes models.py ein. Jede Top-Level-Klasse kommt mit expandierten verschachtelten Typen und ererbten Feldern aus Basisklassen rüber. Wenn du auch eine Instanz-Zuweisung reinpackst, wird diese Instanz serialisiert; sonst wird die erste Klasse mit auflösbaren Defaults verwendet.
Wird mein Code gespeichert?
Dein Code wird zum Konvertieren ans Backend geschickt und nicht persistiert — wir loggen das Payload nicht. Wie bei jedem Online-Tool gilt: wenn der Code wirklich sensibel ist, schau vorher drüber.
Weitere Tools, die du brauchen könntest
Python zu XML ist nur ein Puzzle-Teil. Hier die Tools, die gut dazu passen: