Klistra in Python till vänster och klicka på "Konvertera" — vi gör om det till XMLKlistra in Python-kod

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.

1

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.

2

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.

3

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: