Formater et indenter du XML
- Tableau de bord
- Documentation
- API
Pourquoi formater du XML ?
Le formatage XML (aussi appelé mise en forme XML, indentation XML ou pretty print) consiste à réorganiser un document XML compact ou minifié en une structure indentée, lisible ligne par ligne. Un XML bien formaté améliore la lisibilité humaine, ce qui est indispensable lorsqu'on doit lire une réponse SOAP, parcourir un flux RSS ou inspecter le contenu d'un fichier de configuration.
Concrètement, on formate son XML pour quatre raisons principales :
- Debug : repérer rapidement une balise non fermée, un attribut manquant ou une structure incohérente.
- Intégration manuelle : copier proprement un fragment dans un fichier de configuration sans casser l'indentation existante.
- Code review : comparer deux versions d'un document XML dans un diff Git devient lisible quand chaque balise est sur sa propre ligne.
- Documentation et exemples : un XML formaté est beaucoup plus pédagogique dans une doc technique ou un README.
Cas d'usage typiques
Le XML reste omniprésent dans l'écosystème logiciel. Voici les formats sur lesquels les développeurs utilisent le plus souvent un formateur XML :
- Réponses SOAP : les enveloppes
<soap:Envelope>retournées par des web services SOAP arrivent généralement minifiées. - Flux RSS et Atom : pour inspecter ou auditer un flux de syndication.
- Configurations Spring, Maven (
pom.xml), Ant, Ivy : fichiers de build et de dépendances Java. AndroidManifest.xmlet autres ressources XML d'un projet Android.- Fichiers SVG : un graphique vectoriel exporté depuis un logiciel de design est souvent compressé sur une seule ligne.
- Exports e-commerce : flux produits Google Shopping, exports Magento, Shopify ou PrestaShop.
- Documents OOXML : les fichiers
.docx,.xlsxet.pptxsont des archives ZIP contenant des fichiers XML qu'il faut souvent inspecter. - Sitemaps XML : les
sitemap.xmlservis aux moteurs de recherche.
Comment fonctionne le formatage XML
Un formateur XML ne se contente pas d'ajouter des espaces au hasard. Il effectue deux étapes :
- Parsing : le document est lu puis transformé en arbre DOM (Document Object Model). Cette étape valide aussi que le XML est bien formé (balises correctement imbriquées, attributs entre guillemets, un seul élément racine).
- Sérialisation indentée : l'arbre DOM est ré-émis sous forme de texte avec des sauts de ligne entre les éléments et une indentation proportionnelle à la profondeur dans l'arbre.
Cette approche par arbre garantit que la structure logique du document reste strictement identique : seuls les espaces non significatifs entre balises sont modifiés. Les sections CDATA, les commentaires et les instructions de traitement sont préservés. Les transformations plus poussées (XSLT) ou les requêtes (XPath) opèrent d'ailleurs sur ce même arbre DOM.
Comment utiliser le formateur XML
La procédure est volontairement simple :
- Collez votre document XML dans la zone de texte, ou téléversez un fichier
.xml. - Validez le formulaire : le document est analysé et indenté automatiquement.
- Le résultat formaté apparaît dans la zone de sortie. En cas d'erreur de parsing, un message indique la nature et la position approximative du problème.
- Copiez le résultat avec le bouton dédié, ou téléchargez-le pour l'intégrer directement à votre projet.
Bonnes pratiques d'indentation XML
Quelques conventions à respecter pour produire un XML propre et durable :
- Indentation : 2 ou 4 espaces selon la convention de votre équipe. Restez cohérent dans tout le projet.
- Sauts de ligne : un élément par ligne, ce qui rend les diffs Git exploitables.
- Sections CDATA : un bon formateur conserve intégralement les blocs
<![CDATA[ ... ]]>sans réindenter leur contenu, qui est traité comme texte brut. - Encodage : déclarez toujours l'encodage en première ligne avec
<?xml version="1.0" encoding="UTF-8"?>. UTF-8 est le standard de fait. - Attributs : si un élément a beaucoup d'attributs, certaines équipes les passent à la ligne pour la lisibilité ; sinon ils restent sur la même ligne que la balise ouvrante.
- Commentaires :
<!-- ... -->doivent être conservés tels quels par le formateur.
Exemple avant / après
Voici un exemple concret d'un XML compact embelli par le formateur.
Avant (une seule ligne, illisible) :
<root><item id="1">val</item><item id="2">val2</item></root>
Après (formaté avec 2 espaces) :
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item id="1">val</item>
<item id="2">val2</item>
</root>
La structure logique est strictement identique : seul l'agencement visuel change.
Exemple complet
Un document XML plus volumineux après formatage ressemble à ceci :
<?xml version="1.0" encoding="UTF-8"?>
<root>
<user id="12345">
<name>John Doe</name>
<email>johndoe@example.com</email>
<address>
<street>123 Main St</street>
<city>Springfield</city>
<state>IL</state>
<postalCode>62704</postalCode>
<country>USA</country>
</address>
<phoneNumbers>
<phoneNumber type="home">555-1234</phoneNumber>
<phoneNumber type="work">555-5678</phoneNumber>
</phoneNumbers>
<preferences>
<newsletter>true</newsletter>
<theme>dark</theme>
</preferences>
<lastLogin>2024-06-14T09:30:00Z</lastLogin>
</user>
</root>
Questions fréquentes
Qu'est-ce qu'un XML bien formé ?
Un XML est dit bien formé (well-formed) lorsqu'il respecte les règles syntaxiques de base : un seul élément racine, balises correctement imbriquées et fermées, attributs entre guillemets, caractères spéciaux échappés (&, <, >). C'est un prérequis pour pouvoir parser le document. À ne pas confondre avec un XML valide, qui en plus respecte un schéma XSD ou une DTD.
Quelle est la différence entre formatage (pretty print) et minification XML ?
Le pretty print ajoute des sauts de ligne et de l'indentation pour la lecture humaine. La minification fait l'inverse : elle supprime tous les espaces non significatifs pour réduire la taille du document, ce qui est utile pour le transit réseau (réponses SOAP, API XML). Les deux documents sont sémantiquement équivalents.
Les commentaires et sections CDATA sont-ils préservés lors du formatage ?
Oui. Un formateur correct préserve les commentaires <!-- ... -->, les sections <![CDATA[ ... ]]> ainsi que les instructions de traitement (<? ... ?>). Le contenu d'un CDATA reste intact sans réindentation, puisqu'il est traité comme texte brut. Vérifiez le résultat si vos commentaires ont une importance documentaire.
Les namespaces XML (xmlns) sont-ils gérés ?
Oui. Les déclarations de namespace (xmlns:soap="...") et les préfixes associés (<soap:Envelope>) sont préservés tels quels. Le formateur ne renomme pas les préfixes et ne déplace pas les déclarations dans l'arbre, ce qui garantit que la sémantique du document reste identique. Les namespaces par défaut (sans préfixe) sont également maintenus à leur niveau de déclaration.
Faut-il indenter avec des espaces ou des tabulations ?
Les deux fonctionnent, mais les espaces sont la convention dominante car ils s'affichent de façon identique partout (terminaux, navigateurs, diff Git). 2 ou 4 espaces selon la verbosité de votre XML : 2 pour les documents très imbriqués (SVG, configurations Spring), 4 pour les documents plats. L'essentiel reste la cohérence dans tout le projet.
Le formateur modifie-t-il la sémantique du document ?
Non. Seuls les espaces blancs entre balises sont ajustés. La structure DOM, les valeurs des attributs et le contenu textuel des éléments restent identiques. Une exception : le contenu textuel significatif (avec xml:space="preserve") doit être conservé tel quel, vérifiez cet aspect si vos données comportent des espaces porteurs de sens.
Peut-on valider un XML en même temps que le formater ?
Le formateur effectue déjà une validation syntaxique (XML bien formé) puisqu'il doit parser le document. Pour une validation contre un schéma XSD ou une DTD, il faut un outil dédié : la validation structurelle dépasse le périmètre d'un simple formateur. xmllint --schema ou xerces conviennent pour cette étape supplémentaire.
Exemple de requête
curl -X POST https://cdrn.fr/api/v1/tools/xml-formatter/execute \
-H "Content-Type: application/json" \
-d '{"input":"..."}'
Schéma d'entrée
| Champ | Type | Requis | Défaut |
|---|---|---|---|
input |
text | ✓ | – |
Points d'accès
GET https://cdrn.fr/api/v1/tools- liste tous les outils disponiblesGET https://cdrn.fr/api/v1/tools/xml-formatter- récupère le schéma de cet outilPOST https://cdrn.fr/api/v1/tools/xml-formatter/execute- exécute cet outil avec un payload JSON