Convertitore Python in XML
Incolla una classe, un dict o una dataclass Python. Ti ridiamo XML pulito.
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.
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.
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.
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: