Incolla il Python a sinistra e clicca "Convert" — lo trasformiamo in XMLIncolla codice Python

Cosa fa questo tool

Se ti è mai toccato comporre a mano un payload XML che rispecchiasse una classe Python — per un endpoint SOAP, un file di config, un'integrazione legacy o una fixture di test — conosci la procedura: litighi un'ora con xml.etree.ElementTree e poi ti accorgi di aver dimenticato un campo annidato. Incolla invece il Python qui e ottieni XML ben formato in un colpo solo. Un dict semplice, una dataclass, un modello Pydantic o qualcosa di profondamente annidato — il risultato è lo stesso.

Non è un banale find-and-replace. Il convertitore capisce davvero come i valori Python si mappano su XML: Decimal("49.99") diventa testo numerico semplice, datetime e date escono come stringhe ISO-8601, UUID diventa la solita stringa esadecimale 8-4-4-4-12, i campi Optional[...] con valore None diventano elementi vuoti invece di sparire, e list[T] o List[T] diventano elementi contenitore con un figlio per item, nominato secondo il tipo dell'item — la stessa forma che produrrebbero librerie come xmltodict o lxml.

Anche i type hint vengono onorati. I nomi dei campi di @dataclass diventano nomi di elemento. Field(alias="x") sui modelli Pydantic rinomina l'elemento. field(metadata={"xml": "attribute"}) su una dataclass spinge il valore su un attributo invece che su un elemento figlio. I campi privati che iniziano con _ vengono scartati. Se incolli più classi, ognuna finisce nell'output con i tipi annidati espansi e gli attributi ereditati inclusi. Niente viene ingoiato in silenzio — se un campo c'è, appare nell'XML.

Come si usa

Tre passaggi. Funziona allo stesso modo sia che incolli un dict di cinque righe, sia un models.py intero.

1

Incolla il tuo Python (o prova l'esempio)

Butta il Python nell'editor di sinistra così com'è. Un dict letterale, una dataclass, un Pydantic BaseModel, classi annidate o una assegnazione di istanza — va bene tutto. Clicca Load Sample se vuoi prima vedere un esempio realistico di Order / OrderItem / Address.

Lascia import, decoratori e type hint. Non serve toglierli — il parser legge le annotazioni di typing e le usa per decidere i tipi di output.

2

Clicca Converti

Clicca il pulsante verde Convert. Il tool legge il Python, preserva ogni classe e attributo, ed emette l'XML in un colpo solo. Durante l'esecuzione vedi un breve indicatore di caricamento.

3

Copia l'XML

Il pannello di destra si riempie con XML indentato e ben formato che qualsiasi parser XML standard accetta senza storie. Copialo direttamente nella tua richiesta SOAP, nel file di config, nella fixture di test o nei docs.

Quando serve davvero

Fixture SOAP / integrazioni legacy

Hai un modello Pydantic di request e ti serve un body XML da mandare a un servizio SOAP legacy. Incolli il modello, prendi l'XML, lo incolli nel tuo test runner — fatto.

Trasformare dataclass in config

Una Settings dataclass con 30 campi diventa un template XML pronto da editare per qualsiasi store di configurazione XML — senza scaffolding fatto a mano, senza refusi.

Tenere onesti i docs XSD

Genera esempi XML per il tuo README, l'API reference o una documentazione di schema basata su XSD direttamente dai modelli reali nel codice, così gli esempi non si discostano mai dalla realtà.

Seeding per test di integrazione

Converti i letterali di istanza delle tue fixture pytest in file XML di seed per i sistemi che ancora parlano XML — API legacy, mock server o pipeline XSLT.

Domande ricorrenti

Funziona con dataclass, Pydantic e dict semplici?

Sì, tutti e tre. I nomi dei campi di @dataclass e Pydantic BaseModel vengono usati come nomi di elemento. Anche i letterali di dict vanno bene — le chiavi diventano nomi di elemento e i valori vengono emessi in base al tipo. Modelli o dict annidati vengono espansi come elementi annidati.

Come gestisce Decimal, datetime e UUID?

Decimal("49.99") diventa 49.99 come testo dell'elemento. datetime, date e time escono come stringhe ISO-8601. UUID diventa una stringa esadecimale standard 8-4-4-4-12. Le sottoclassi Enum emettono il loro .value. I set diventano elementi contenitore come le liste.

E Optional[...] e i valori None?

I campi con valore None vengono scritti come elementi vuoti (<field/>) invece di essere eliminati — la forma dell'output resta coerente, cosa che conta se un XSD a valle richiede che l'elemento sia presente.

Posso rinominare elementi o spingere campi su attributi?

Sì. Sui modelli Pydantic, Field(alias="x") rinomina l'elemento. Sulle dataclass, field(metadata={"xml": "attribute"}) spinge il campo su un attributo del parent, e metadata={"xml": "name", ...} lo rinomina. I campi privati con underscore iniziale (_cache, _tmp) vengono scartati di default.

Posso incollare più classi insieme?

Sì — incolla pure un models.py intero. Ogni classe di primo livello esce con i tipi annidati espansi e i campi ereditati dalle classi base inclusi. Se includi anche un'assegnazione di istanza, viene serializzata quella istanza; altrimenti si usa la prima classe con default risolvibili.

Il mio codice viene salvato?

Il codice viene inviato al backend solo per essere convertito e non viene persistito — non logghiamo il payload. Come con qualsiasi tool online, se il codice è davvero sensibile, dagli un'occhiata prima di incollarlo.

Altri tool che potrebbero servirti

Python in XML è un pezzo del puzzle. Questi si abbinano bene: