Outil de Formatage XML
Qu'est-ce que le formatage XML ?
Le formateur XML transforme un XML compact ou désordonné en structure indentée et lisible. XML est présent dans des fichiers de configuration, messages SOAP, sitemaps, flux RSS, documents bureautiques, artefacts de build et nombreuses intégrations anciennes, où une balise fermante manquante ou un caractère mal échappé peut bloquer le traitement. L’outil aide à repérer plus vite éléments imbriqués, attributs, nœuds texte, espaces de noms et zones d’erreur probables. Il sert au débogage, à la documentation, à la comparaison et à la formation, mais ne remplace pas une validation de schéma lorsqu’un XSD, contrat API ou format partenaire doit être respecté.
Comment utiliser
Comment utiliser
- Collez ou saisissez des données XML dans la zone de saisie de gauche
- Sélectionnez la taille d'indentation (2 espaces, 4 espaces ou Tab)
- Cliquez sur Formater pour embellir ou sur Minifier pour supprimer les espaces
- Les résultats s'affichent à droite avec coloration syntaxique
- Cliquez sur Copier ou sur Télécharger pour enregistrer le résultat
Notes sur XML
- Le formatage modifie les espaces blancs, pas la signification du document, mais les espaces blancs peuvent rester importants dans les nœuds de texte et les documents à contenu mixte.
- En cas d'échec de l'analyse, vérifiez les balises non fermées, l'imbrication incorrecte, les attributs en double et les caractères non échappés comme les esperluettes.
Cas d’utilisation
` (une fonctionnalité SGML acceptée par XML 1.0 §3.1) est préservée telle quelle, les éléments vides HTML transitant dans du XHTML ou RSS doivent garder leur barre oblique ; écrire `
` modifiera silencieusement la page rendue dans les parseurs HTML5. Les sections CDATA, y compris la règle du terminateur `]]>`, sont également conservées intactes au lieu d’être converties en entités `&`.
Principe technique
Le formatage XML repose sur la recommandation W3C XML 1.0 (Cinquième édition). L'analyse se fait via `new DOMParser().parseFromString(src, 'application/xml')` (ou `text/xml`), qui renvoie un Document dont les nœuds correspondent aux sept productions définies dans la spécification : Element, Attr, Text, CDATASection, Comment, ProcessingInstruction et DocumentType. Contrairement à HTML, les analyseurs XML sont stricts : une balise mal fermée, un `&` non échappé ou un attribut en double interrompt l'analyse et le DOMParser renvoie un élément `<parsererror>` dont le corps contient la ligne et la colonne. Les équivalents côté serveur incluent libxml2 (`xmllint --format`), `xml.etree.ElementTree` en Python, StAX/SAX en Java et `XmlReader` en .NET. Le sérialiseur parcourt le DOM nœud par nœud : chaque Element s'ouvre sur sa propre ligne avec une indentation de profondeur*indent espaces, les enfants récursent avec profondeur+1, la balise fermante s'aligne sur la balise ouvrante, et les éléments vides se réduisent en notation auto-fermante `<foo/>` que la section §3.1 de la spécification déclare sémantiquement équivalente à `<foo></foo>`. Cinq entités prédéfinies sont systématiquement ré-encodées dans les valeurs de texte et d'attribut : `&` `<` `>` `"` `'`. Les sections CDATA (`<![CDATA[ ... ]]>`) sont préservées telles quelles car elles constituent la soupape d'échappement explicite pour le contenu qui nécessiterait un encodage par entités ; la terminaison `]]>` ne peut pas apparaître dans un bloc CDATA selon la section §2.7, ce que l'analyseur applique. Les instructions de traitement comme `<?xml-stylesheet?>` et la déclaration XML `<?xml version="1.0" encoding="UTF-8"?>` sont conservées dans le prologue du document. La déclaration DOCTYPE est retransmise sous forme de chaîne unique. Deux subtilités engendrent l'essentiel de la complexité des formateurs. D'abord, le contenu mixte — un élément contenant à la fois du texte et des éléments enfants, comme `<p>Hello <b>world</b>!</p>` — ne peut pas être ré-indenté sans modifier l'infoset du document, car chaque caractère d'espace dans un tel contexte est un nœud Text significatif. Les formateurs détectent le contenu mixte en vérifiant si un élément possède un nœud Text enfant non vide et basculent en sérialisation sur une seule ligne pour ce sous-arbre. Ensuite, les déclarations d'espace de noms (`xmlns`, `xmlns:prefix`) doivent rester sur l'élément où elles sont initialement déclarées ; les déplacer changerait leur portée. L'ordre des attributs n'est pas canonique selon la spécification, la plupart des formateurs appliquent donc un tri alphabétique tout en préservant les déclarations `xmlns:*` en tête. L'analyse et la sérialisation sont en O(n) par rapport à la longueur du document ; les très gros flux passent généralement par SAX plutôt que de construire un DOM en mémoire.
- Spécification : W3C XML 1.0 Cinquième édition (REC-xml-20081126) ; le DOM est construit via `DOMParser().parseFromString(src, 'application/xml')`, équivalent à libxml2 ou `xmllint --format` côté serveur.
- Strict par conception : balises mal appariées, `&`/`<` non échappés, attributs en double ou caractères invalides déclenchent un élément `<parsererror>` ; la récupération permissive de HTML ne s'applique pas.
- Cinq entités prédéfinies ré-encodées dans les valeurs de texte et d'attribut : `&` `<` `>` `"` `'`. Les références de caractères numériques comme ` ` sont préservées telles quelles.
- L'auto-fermeture `<foo/>` et `<foo></foo>` sont sémantiquement identiques selon §3.1 ; les sections CDATA sont préservées telles quelles et ne peuvent pas contenir la terminaison `]]>`.
- Le contenu mixte (texte + éléments enfants) ne peut pas être ré-indenté sans modifier l'infoset — le sérialiseur détecte les espaces significatifs et sérialise ces sous-arbres en ligne.
- Les déclarations d'espace de noms (`xmlns`, `xmlns:prefix`) restent sur l'élément de première déclaration ; les déplacer changerait leur portée. L'ordre des attributs n'est pas canonique, un tri stable (xmlns en tête, puis alphabétique) est donc typique.
- Complexité : analyse O(n) et sérialisation O(n) pour les outils basés sur DOM ; les gros documents passent par SAX/StAX (xml.sax en Python, javax.xml.stream en Java) pour éviter de charger l'arbre complet en mémoire.
Exemples
Éléments de base
<!-- Entrée (une ligne) -->
<book><title>XML Guide</title><author>Jane Doe</author><year>2024</year></book>
<!-- Sortie (2 espaces) -->
<book>
<title>XML Guide</title>
<author>Jane Doe</author>
<year>2024</year>
</book>Avec attributs
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="b001" lang="en" available="true">
<title>Effective XML</title>
<price currency="USD">29.99</price>
</book>
</catalog>Structure imbriquée avec namespaces et CDATA
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns:GetUser xmlns:ns="https://example.com/api">
<ns:UserId>10086</ns:UserId>
<ns:Script>
<![CDATA[ if (a < b && b > 0) { return true; } ]]>
</ns:Script>
</ns:GetUser>
</soap:Body>
</soap:Envelope>FAQ
Que fait-il ?
Il met en forme le XML en indentant les éléments imbriqués, en plaçant chaque élément sur sa propre ligne et en alignant les balises fermantes. Pratique pour inspecter des réponses SOAP, des flux RSS, des fichiers de configuration et d'autres charges utiles XML reçues sur une seule ligne géante.
Valide-t-il par rapport à un schéma ?
Non. Il met en forme tout XML bien formé que vous collez. La validation par schéma (XSD, DTD, RELAX NG) nécessite un outil distinct. Les erreurs de bonne formation (balises non concordantes, crochets fermants manquants) sont signalées, mais la page ne les corrigera pas.
L'ordre des attributs est-il préservé ?
Oui. L'ordre des attributs XML n'est techniquement pas significatif selon la spécification, mais le formateur conserve l'ordre original pour ne pas vous surprendre. Les sections CDATA, les commentaires et les instructions de traitement sont également préservés.
Comment les espaces sont-ils gérés ?
Les espaces entre éléments sont normalisés (un élément par ligne avec indentation). Les espaces à l'intérieur du contenu textuel sont préservés par défaut, car le contenu d'un élément est significatif. Les attributs xml:space='preserve' sont respectés là où ils sont présents.
Puis-je minifier du XML ?
Certaines versions proposent un mode minification qui supprime les espaces entre éléments. Attention : tout espace significatif (contenu textuel, régions xml:space='preserve') doit être préservé. Testez l'aller-retour si votre XML contient du texte enrichi.
Le XML est-il téléversé ?
Non. L'analyse et la mise en forme s'exécutent dans votre navigateur via DOMParser et XMLSerializer (intégrés au navigateur). Rien n'est transmis.
Et les espaces de noms XML ?
Les déclarations d'espaces de noms (xmlns) ainsi que les éléments et attributs préfixés sont mis en forme exactement comme écrits. La redéclaration du même espace de noms dans des éléments imbriqués est préservée (certains validateurs y prêtent attention, d'autres non).