Formater du XML
Formateur XML réindente un document XML dans votre navigateur avec un tokenizer en une seule passe, si bien que les commentaires, sections CDATA, sous-ensembles DOCTYPE et valeurs d’attribut contenant des chevrons passent tous intacts. Il signale les balises mal appariées ou non fermées avec une ligne et une colonne au lieu de remodeler l’arbre en silence.
Comment fonctionne Formater du XML ?
La plupart des formateurs XML sont une série d’expressions régulières : retirer les commentaires, puis découper sur les balises, puis réindenter. Cet ordre ne peut pas être rendu correct, car les passes dépendent les unes des autres en cercle. Décider si <!-- ouvre un commentaire exige de savoir si l’on se trouve dans une section CDATA. Décider où commence une section CDATA exige de savoir que l’on n’est pas dans un commentaire. Décider si > termine une balise exige de savoir si l’on se trouve dans une valeur d’attribut. Quel que soit l’ordre choisi, l’un des trois est faux, et l’échec est une corruption silencieuse plutôt qu’une erreur.
Ce formateur scanne donc le document exactement une fois en un flux de tokens — déclaration, instruction de traitement, DOCTYPE, commentaire, CDATA, balise ouvrante, balise fermante, balise auto-fermante, texte — et tout ce qui suit est un fold sur ces tokens. Le tokenizer est sans perte par construction : chaque octet de l’entrée atterrit dans exactement un token, et un test affirme que leur concaténation reproduit le document d’origine octet pour octet.
C’est cette conception qui fait fonctionner les cas épineux au lieu de les traiter comme des cas particuliers. Un DOCTYPE avec sous-ensemble interne peut contenir un > à l’intérieur, donc le scan suit la profondeur de crochets au lieu de prendre la première fermeture d’angle. Une valeur d’attribut peut contenir un >, donc le scan des balises suit les guillemets. Un < isolé qui n’est pas le début d’une balise — XML invalide, omniprésent dans les fichiers écrits à la main — est transporté comme texte au lieu d’interrompre un formatage que l’auteur voit bien devoir réussir.
L’indentation garde une exception délibérée : un élément dont le seul enfant est du texte reste sur une ligne, donc vous obtenez <name>Ada</name> plutôt que trois lignes pour deux mots. Éclater chaque feuille est la raison principale pour laquelle le XML formaté par une machine est plus difficile à lire que celui écrit à la main.
Quand l’arbre ne se referme pas correctement, le formateur s’arrête et dit où. Un </c> mal apparié là où </b> était attendu est signalé avec sa ligne et sa colonne ; un document qui se termine au milieu de l’arbre nomme les éléments encore ouverts. L’alternative — refermer les balises en silence à votre place — produit un document qui a l’air correct et qui n’est pas celui que vous aviez, ce qui est le pire résultat possible.
Minifié en entrée
<r><a id="1"><b>x</b></a><!-- c --><d/></r>
Formaté en sortie
<r>
<a id="1">
<b>x</b>
</a>
<!-- c -->
<d />
</r>Quelles options et quels cas limites Formater du XML prend en charge ?
| Paramètre | Type | Valeur par défaut | Comportement et cas limites |
|---|---|---|---|
| Indentation | 2 | 4 | tab | 2 espaces | Appliquée par niveau d’imbrication. Les tabulations sont le bon choix quand le fichier sera lu dans des éditeurs aux préférences différentes, puisque chaque lecteur contrôle la largeur visuelle. |
| Compacter les blancs | booléen | true | Normalise les suites d’espaces et de sauts de ligne dans les nœuds de texte. Désactivez-la pour les documents où le contenu texte dépend des blancs, comme du code source intégré hors d’une section CDATA. |
| Supprimer les commentaires | booléen | false | Supprime entièrement <!-- … -->. Les commentaires sont conservés par défaut, car dans les fichiers de configuration ils sont souvent la seule documentation existante. |
| Retour à la ligne des attributs | entier | 0 (jamais) | Au-delà de ce nombre, chaque attribut passe sur sa propre ligne. Utile pour SVG et XSLT, où un seul élément peut porter une douzaine d’attributs et où une ligne non coupée sort de l’écran. |
| CDATA | conservé | — | Reproduit tel quel, blancs internes compris, y compris tout caractère qui ressemble à du balisage. Tout l’intérêt d’une section CDATA est que son contenu n’est pas analysé. |
| DOCTYPE | conservé | — | Laissé intact, y compris un sous-ensemble interne contenant des caractères >. S’arrêter au premier > tronque la déclaration et transforme le reste en texte. |
| Espaces de noms | conservés | — | Les préfixes et les déclarations xmlns passent inchangés. Ceci est un formateur, pas un validateur : il ne vérifie pas qu’un préfixe est lié. |
| Entrée malformée | erreur | — | Une balise fermante qui ne correspond pas, un commentaire ou un CDATA non terminé, ou un document qui se coupe au milieu de l’arbre sont signalés avec leur position. Rien n’est corrigé automatiquement, car un document réparé en silence n’est plus le vôtre. |
Questions fréquentes
Le formatage va-t-il changer la signification de mon XML ?
Cela peut arriver, d’une manière précise : l’espace blanc à l’intérieur du contenu textuel est une donnée en XML, et le compacter change cette donnée. C’est pourquoi Collapse whitespace est une option à bascule et non un comportement permanent — désactivez-la pour les documents où le texte est sensible aux espaces. Tout le reste est préservé exactement, y compris le contenu CDATA, les commentaires, les valeurs d’attribut et le DOCTYPE.
Pourquoi refuse-t-il mon document au lieu de le réparer ?
Parce que deviner quelle balise vous vouliez fermer n’est pas quelque chose qu’un formateur peut faire sans risque. Avec <a><b></a>, fermer <b> à votre place produit un document qui semble correct et dont l’arbre diffère de celui que vous avez écrit. L’erreur nomme la balise et la position pour que vous décidiez — cela prend quelques secondes et ne peut pas se tromper.
Gère-t-il SVG, XSLT, RSS, SOAP et les layouts Android ?
Oui — tout cela est du XML, et rien ici n’est guidé par le schéma. SVG et XSLT profitent en particulier de l’option de repli des attributs, car un élément unique avec une douzaine d’attributs est courant et, sans repli, il part loin hors de l’écran.
Et le HTML ?
Seulement du HTML en forme de XHTML. Le vrai HTML a des éléments vides qui ne se ferment jamais (<br>, <img>), des balises fermantes optionnelles (<li>, <td>) et des éléments à texte brut comme <script> dont le contenu n’est pas du balisage. Ce tokenizer tient un document aux règles du XML, donc il signalera un <br> non fermé comme une erreur. C’est correct pour le XML et faux pour le HTML.
Y a-t-il une limite de taille ?
8 MB. Le formatage s’exécute sur le thread principal, donc au-delà de ce plafond l’outil refuse plutôt que de bloquer l’onglet. La tokenisation et le formatage sont itératifs plutôt que récursifs, donc un document profondément imbriqué — il existe un test à cinq mille niveaux — produit un résultat au lieu de faire déborder la pile d’appels.
Mon document est-il envoyé ?
Non. Il est tokenisé et réindenté par du JavaScript dans l’onglet déjà ouvert. Ouvrez le panneau Network et collez-en un : rien de ce qui le transporte ne sort. Les fichiers de configuration XML contiennent régulièrement des chaînes de connexion, des noms d’hôtes internes et des identifiants — exactement la matière qui ne devrait pas passer par un serveur inconnu pour être reformatée.