Convertisseur Python vers XML
Collez une classe, un dict ou une dataclass Python. Récupérez du XML propre.
Ce que fait cet outil
Si vous avez déjà eu à fabriquer à la main un payload XML pour refléter une classe Python — pour un endpoint SOAP, un fichier de config, une intégration legacy ou une fixture de test — vous connaissez la chanson : vous vous battez pendant une heure avec xml.etree.ElementTree, puis vous réalisez que vous avez oublié un champ imbriqué. Collez plutôt le Python ici et récupérez du XML bien formé en un seul passage. Un dict simple, une dataclass, un modèle Pydantic, ou quelque chose de profondément imbriqué — même résultat.
Ce n'est pas un bête remplacement de chaînes. Le convertisseur comprend comment les valeurs Python se mappent réellement en XML : Decimal("49.99") devient du texte numérique simple, datetime et date sortent en chaînes ISO-8601, UUID devient une chaîne hex standard 8-4-4-4-12, les champs Optional[...] avec valeur None deviennent des éléments vides au lieu d'être supprimés, et list[T] ou List[T] deviennent des éléments conteneurs avec un enfant par item, nommé d'après le type de l'item — la même forme que produiraient des bibliothèques comme xmltodict ou lxml.
Les annotations de type sont respectées aussi. Les noms de champs de @dataclass deviennent des noms d'élément. Field(alias="x") sur les modèles Pydantic renomme l'élément. field(metadata={"xml": "attribute"}) sur une dataclass pousse la valeur vers un attribut plutôt qu'un élément enfant. Les champs privés commençant par _ sont jetés. Si vous collez plusieurs classes, chacune atterrit dans la sortie avec les types imbriqués développés et les attributs hérités intégrés. Rien n'est avalé en silence — si un champ est là, il apparaît dans le XML.
Comment l'utiliser
Trois étapes. Ça marche pareil que vous colliez un dict de cinq lignes ou un models.py complet.
Collez votre Python (ou essayez l'exemple)
Déposez votre Python tel quel dans l'éditeur de gauche. Un dict literal, une dataclass, un Pydantic BaseModel, des classes imbriquées ou une assignation d'instance — tout passe. Cliquez sur Load Sample si vous voulez voir d'abord un exemple réaliste Order / OrderItem / Address.
Laissez les imports, décorateurs et annotations de type. Pas besoin de les virer — le parseur lit les annotations typing et s'en sert pour décider des types de sortie.
Cliquez sur Convert
Cliquez sur le bouton vert Convert. L'outil lit le Python, préserve chaque classe et attribut, et émet le XML en un seul passage. Un petit indicateur de chargement s'affiche pendant l'exécution.
Copiez le XML
Le panneau de droite se remplit de XML indenté et bien formé que tout parseur XML conforme acceptera. Copiez-le directement dans votre requête SOAP, votre fichier de config, votre fixture de test ou votre doc.
Quand ça sert vraiment
Fixtures SOAP / intégrations legacy
Vous avez un modèle de requête Pydantic et il vous faut un body XML à envoyer à un service SOAP legacy. Collez le modèle, récupérez le XML, collez-le dans votre test runner — terminé.
Transformer des dataclasses en config
Une dataclass Settings avec 30 champs devient un template XML prêt à éditer pour n'importe quel store de paramètres basé sur XML — pas de plomberie manuelle, pas de typos.
Garder la doc XSD alignée
Générez des exemples XML pour votre README, votre référence d'API ou une doc adossée à un XSD directement depuis les modèles réels de votre code, pour que les exemples ne dérivent jamais.
Alimenter les tests d'intégration
Convertissez les littéraux d'instance de vos fixtures pytest en fichiers XML seed pour les systèmes qui parlent encore XML — APIs legacy, mock servers ou pipelines XSLT.
Questions fréquentes
Ça marche avec les dataclasses, Pydantic et les dicts simples ?
Oui, les trois. Les noms de champs de @dataclass et de Pydantic BaseModel sont utilisés comme noms d'élément. Les littéraux de dict simple fonctionnent aussi — les clés deviennent les noms d'éléments et les valeurs sont émises selon leur type. Les modèles ou dicts imbriqués sont développés en éléments imbriqués.
Comment sont gérés Decimal, datetime et UUID ?
Decimal("49.99") devient 49.99 en texte de l'élément. datetime, date et time sortent en chaînes ISO-8601. UUID devient une chaîne hex standard 8-4-4-4-12. Les sous-classes d'Enum émettent leur .value. Les set deviennent des éléments conteneurs comme les listes.
Et les Optional[...] et les valeurs None ?
Les champs avec valeur None sont écrits comme des éléments vides (<field/>) plutôt que supprimés — la forme de la sortie reste cohérente, ce qui compte si un XSD en aval exige que l'élément soit présent.
Je peux renommer des éléments ou pousser des champs vers des attributs ?
Oui. Sur les modèles Pydantic, Field(alias="x") renomme l'élément. Sur les dataclasses, field(metadata={"xml": "attribute"}) pousse le champ vers un attribut du parent, et metadata={"xml": "name", ...} le renomme. Les champs privés préfixés par un underscore (_cache, _tmp) sont jetés par défaut.
Je peux coller plusieurs classes d'un coup ?
Oui — collez un models.py entier. Chaque classe de premier niveau passe avec les types imbriqués développés et les champs hérités des classes de base inclus. Si vous incluez aussi une assignation d'instance, c'est cette instance qui est sérialisée ; sinon la première classe avec des valeurs par défaut résolvables est utilisée.
Mon code est-il stocké ?
Votre code est envoyé au backend pour conversion et n'est pas persisté — on ne log pas le payload. Comme toujours avec les outils en ligne, si le code est vraiment sensible, relisez-le avant de le coller.
Autres outils qui pourraient vous servir
Python vers XML n'est qu'une pièce du puzzle. Voici ceux qui s'y marient bien :