ToolActToolAct

Outil de Formatage XML

XML en entrée
Résultat formaté
Lignes: 1Caractères: 0Octets: 0
Lignes: 1Caractères: 0

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

  1. Collez ou saisissez des données XML dans la zone de saisie de gauche
  2. Sélectionnez la taille d'indentation (2 espaces, 4 espaces ou Tab)
  3. Cliquez sur Formater pour embellir ou sur Minifier pour supprimer les espaces
  4. Les résultats s'affichent à droite avec coloration syntaxique
  5. 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

Reformater un XML compact après avoir vérifié qu’il est valideColsez un flux minifié, un message SOAP, un sitemap, un fragment SVG ou une réponse d’appareil et le parseur XML du navigateur le vérifie avant de produire la sortie. Le XML valide est ensuite indenté avec 2 espaces, 4 espaces ou tabulations pour faciliter l’inspection des éléments imbriqués.
Conserver les déclarations, commentaires, CDATA et balises auto-fermantes lisiblesLe formateur traite séparément les instructions de traitement, les commentaires, les blocs CDATA, les déclarations, les balises fermantes, les nœuds texte et les balises auto-fermantes au lieu de considérer le document comme du texte brut. Les fichiers de configuration et exemples d’intégration conservent leurs sections XML spéciales visibles.
Produire du XML lisible ou une charge compacte pour l’échangeUtilisez le mode formatage pour examiner la hiérarchie et le mode minification pour préparer une charge plus légère pour les exemples, les fixtures de test ou le transport. Les erreurs de parsing s’affichent avec les informations de ligne et de colonne disponibles, tandis que la validation de schéma et les vérifications de règles métier restent de la responsabilité du système XML cible.
Localiser une balise manquante grâce à la position de l’erreurLorsque la page signale un échec de parsing, notez la ligne et la colonne, puis cherchez juste au-dessus un parent non fermé ou une balise fermante orpheline. Le formateur ne corrige que les espaces, une correction structurelle réelle doit être faite manuellement dans la source avant de reformater. La notation abrégée auto-fermante comme `
` (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 `&`.
Mettre en forme un fragment SVG avant de l’intégrer dans du HTMLCollez un SVG sur une seule ligne, développez-le avec une indentation de 2 espaces et vérifiez que les données de chemin, le viewBox et les déclarations d’espace de noms sont intacts. Le SVG reformaté peut ensuite être intégré en ligne dans du HTML sans casser la forme, et la hiérarchie facilite le débogage des attributs de transformation ou de dégradé. Selon la spécification W3C XML 1.0, l’ordre des attributs sur un élément n’est pas canonique, le reformatage peut donc déplacer id et class par rapport à la source, et tout préfixe d’espace de noms déclaré comme xmlns:svg sur l’élément svg racine doit y rester sinon le navigateur ne reconnaîtra pas les enfants. La déclaration XML commençant par <?xml version est optionnelle pour le SVG en ligne HTML mais requise pour les flux XML autonomes.

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 : `&amp;` `&lt;` `&gt;` `&quot;` `&apos;`. 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 : `&amp;` `&lt;` `&gt;` `&quot;` `&apos;`. Les références de caractères numériques comme `&#10;` 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).