Conversor Python para XML
Cole uma classe, dict ou dataclass Python. Receba XML limpo de volta.
O que essa ferramenta faz
Se você já teve que montar um payload XML na mão pra refletir uma classe Python — pra um endpoint SOAP, um arquivo de config, uma integração legada ou uma fixture de teste — já sabe como é: briga com o xml.etree.ElementTree por uma hora e aí percebe que esqueceu um campo aninhado. Cola o Python aqui e recebe um XML bem formado de uma vez. Um dict simples, uma dataclass, um modelo Pydantic ou algo bem aninhado — o resultado é o mesmo.
Não é replace bobo de string. O conversor entende como valores Python realmente mapeiam pra XML: Decimal("49.99") vira texto numérico simples, datetime e date saem como strings ISO-8601, UUID vira uma string hex padrão 8-4-4-4-12, campos Optional[...] com valor None viram elementos vazios em vez de sumir, e list[T] ou List[T] viram elementos contêiner com um filho por item, nomeado pelo tipo do item — exatamente a forma que bibliotecas como xmltodict ou lxml produziriam.
Type hints também são respeitadas. Nomes de campo de @dataclass viram nomes de elemento. Field(alias="x") em modelos Pydantic renomeia o elemento. field(metadata={"xml": "attribute"}) numa dataclass empurra o valor pra um atributo em vez de um elemento filho. Campos privados começando com _ são descartados. Se você colar várias classes, cada uma sai com os tipos aninhados expandidos e os atributos herdados incluídos. Nada é engolido em silêncio — se o campo tá lá, aparece no XML.
Como usar
Três passos. Funciona igual pra um dict de cinco linhas ou um models.py inteiro.
Cole seu Python (ou teste o exemplo)
Joga seu Python no editor da esquerda, do jeito que está. Um literal dict, uma dataclass, um Pydantic BaseModel, classes aninhadas ou uma atribuição de instância — tudo funciona. Clica em Load Sample se quiser ver primeiro um exemplo realista de Order / OrderItem / Address.
Não precisa tirar imports, decorators ou type hints. O parser lê as anotações do typing e usa elas pra decidir os tipos de saída.
Aperta o Convert
Clica no botão verde Convert. A ferramenta lê o Python, preserva cada classe e atributo, e emite o XML de uma vez. Um indicador de loading aparece rapidinho enquanto roda.
Copia o XML
O painel da direita preenche com XML indentado e bem formado que qualquer parser XML em conformidade com o padrão aceita. Cola direto no request SOAP, arquivo de config, fixture de teste ou docs.
Quando isso realmente salva
Fixtures de SOAP / integração legada
Você tem um modelo de request Pydantic e precisa de um body XML pra mandar num serviço SOAP legado. Cola o modelo, pega o XML, cola no seu test runner — pronto.
Transformar dataclasses em config
Uma Settings dataclass com 30 campos vira um template XML pronto pra editar pra qualquer store de configuração baseado em XML — sem andaime feito à mão, sem erro de digitação.
Manter docs XSD honestos
Gera amostras XML pro README, referência de API ou docs de schema baseados em XSD direto dos modelos reais do seu código, pra que os exemplos nunca destoem da realidade.
Semear testes de integração
Converte literais de instância das suas fixtures pytest em arquivos XML seed pra sistemas que ainda falam XML — APIs legadas, mock servers ou pipelines XSLT.
Perguntas comuns
Funciona com dataclasses, Pydantic e dicts simples?
Funciona, os três. Nomes de campo de @dataclass e Pydantic BaseModel viram nomes de elemento. Literais de dict também rolam — as chaves viram nomes de elemento e os valores são emitidos pelo tipo. Modelos ou dicts aninhados são expandidos como elementos aninhados.
Como ele trata Decimal, datetime e UUID?
Decimal("49.99") vira 49.99 como texto do elemento. datetime, date e time saem como strings ISO-8601. UUID vira uma string hex padrão 8-4-4-4-12. Subclasses de Enum emitem o .value. set vira elemento contêiner igual a listas.
E Optional[...] e valores None?
Campos com valor None são escritos como elementos vazios (<field/>) em vez de sumirem — a forma da saída fica consistente, o que importa se um XSD downstream exige que o elemento esteja presente.
Dá pra renomear elementos ou empurrar campos pra atributos?
Dá. Em modelos Pydantic, Field(alias="x") renomeia o elemento. Em dataclasses, field(metadata={"xml": "attribute"}) empurra o campo pra atributo do pai, e metadata={"xml": "name", ...} renomeia. Campos privados com underscore na frente (_cache, _tmp) são descartados por padrão.
Posso colar várias classes de uma vez?
Pode — cola um models.py inteiro. Cada classe de nível superior sai com os tipos aninhados expandidos e campos herdados das classes base incluídos. Se também incluir uma atribuição de instância, é essa instância que é serializada; caso contrário, usa a primeira classe com defaults que dá pra resolver.
Meu código fica guardado?
Seu código é enviado pro backend só pra conversão e não é persistido — não logamos o payload. Como com qualquer ferramenta online, se o código for realmente sensível, dá uma olhada antes de colar.
Outras ferramentas que podem ajudar
Python para XML é uma peça do quebra-cabeça. Essas combinam bem: