Python till XML-konverterare
Klistra in en Python-klass, en dict eller en dataclass. Få ren XML tillbaka.
Vad verktyget gör
Om du någonsin har behövt knåpa ihop en XML-payload för hand för att spegla en Python-klass — till en SOAP-endpoint, en config-fil, en legacy-integration eller en test-fixture — känner du igen procedurn: slåss med xml.etree.ElementTree i en timme och sen inse att du glömde ett nästlat fält. Klistra in Pythonen här istället och få tillbaka välformad XML i ett svep. En vanlig dict, en dataclass, en Pydantic-modell eller nåt djupt nästlat — samma resultat.
Det är inte en klumpig string-replace. Konverteraren fattar hur Python-värden faktiskt mappar till XML: Decimal("49.99") blir ren numerisk text, datetime och date kommer ut som ISO-8601-strängar, UUID blir en standard 8-4-4-4-12-hex-sträng, Optional[...]-fält med None-värden blir tomma element istället för att droppas, och list[T] eller List[T] blir container-element med ett barn per item, namngivna efter item-typen — samma form som bibliotek som xmltodict eller lxml skulle spotta ur sig.
Type hints respekteras också. @dataclass-fältnamn blir element-namn. Field(alias="x") på Pydantic-modeller döper om elementet. field(metadata={"xml": "attribute"}) på en dataclass skjuter värdet till en attribut istället för ett barn-element. Privata fält som börjar med _ droppas. Klistrar du in flera klasser så hamnar var och en i outputen med nästlade typer expanderade och ärvda attribut med. Inget sväljs tyst — finns ett fält där dyker det upp i XML:en.
Så här kör du
Tre steg. Fungerar lika bra med en fem-raders dict som med en hel models.py.
Klistra in din Python (eller testa exemplet)
Släpp in Pythonen i vänstra editorn som den är. En dict-literal, en dataclass, en Pydantic BaseModel, nästlade klasser eller en instanstilldelning — allt funkar. Tryck på Load Sample om du vill se ett realistiskt Order / OrderItem / Address-exempel först.
Låt imports, decorators och type hints vara. Du behöver inte ta bort dem — parsern läser typing-annoteringar och använder dem för att bestämma output-typer.
Tryck på Convert
Klicka på den gröna Convert-knappen. Verktyget läser Pythonen, bevarar varje klass och attribut och spottar ut XML:en i ett svep. En kort laddningsindikator visas medan det kör.
Kopiera XML:en
Höger panel fylls med indenterad, välformad XML som vilken standardenlig XML-parser som helst accepterar. Kopiera in den rakt i din SOAP-request, config-fil, test-fixture eller dina docs.
När det här verkligen sitter
Fixtures för SOAP / legacy-integrationer
Du har en Pydantic-requestmodell och behöver en XML-body att skicka till en legacy SOAP-tjänst. Klistra in modellen, ta XML:en, klistra in i din test runner — klart.
Göra om dataclasses till config
En Settings-dataclass med 30 fält blir en redigeringsklar XML-config-mall för vilken XML-baserad settings-store som helst — inget handknåpande, inga typos.
Hålla XSD-docs ärliga
Generera XML-samples till ditt README, din API-referens eller XSD-stödda schema-docs direkt från de faktiska modellerna i koden, så att exemplen aldrig glider iväg från verkligheten.
Seeda integrationstester
Konvertera instanslittrar från dina pytest-fixtures till XML-seed-filer för system som fortfarande pratar XML — legacy-API:er, mock-servrar eller XSLT-pipelines.
Vanliga frågor
Funkar det med dataclasses, Pydantic och vanliga dicts?
Ja, alla tre. Fältnamn från @dataclass och Pydantic BaseModel används som element-namn. Vanliga dict-littrar funkar också — nycklarna blir element-namn och värden skickas ut efter typ. Nästlade modeller eller dicts expanderas som nästlade element.
Hur hanteras Decimal, datetime och UUID?
Decimal("49.99") blir 49.99 som element-text. datetime, date och time kommer ut som ISO-8601-strängar. UUID blir en standard 8-4-4-4-12-hex-sträng. Enum-underklasser skickar ut sitt .value. set blir container-element precis som listor.
Hur blir det med Optional[...] och None-värden?
Fält med None-värde skrivs som tomma element (<field/>) istället för att droppas — output-formen förblir konsekvent, vilket spelar roll om en nedströms XSD kräver att elementet finns där.
Kan jag döpa om element eller skjuta fält till attribut?
Ja. På Pydantic-modeller döper Field(alias="x") om elementet. På dataclasses skjuter field(metadata={"xml": "attribute"}) fältet till en attribut på parenten, och metadata={"xml": "name", ...} döper om det. Privata fält med understreck i början (_cache, _tmp) droppas som default.
Kan jag klistra in flera klasser samtidigt?
Ja — klistra in en hel models.py. Varje topp-nivåklass kommer ut med nästlade typer expanderade och ärvda fält från bas-klasser med. Har du också en instanstilldelning så är det den instansen som serialiseras; annars används den första klassen med lösbara defaults.
Sparas min kod någonstans?
Koden skickas till backenden bara för att konverteras och sparas inte — vi loggar inte payloaden. Som med alla online-verktyg: är det du klistrar in genuint känsligt, ögna igenom det först.
Andra verktyg du kan behöva
Python till XML är en pusselbit. Här är verktygen som passar bra ihop med det: