Si vous avez travaillé avec des API d'entreprise héritées, consommé des flux RSS, ouvert un fichier .docx, ou dessiné un SVG, vous avez utilisé XML — même si vous ne le saviez pas. XML fait fonctionner plus de logiciels que la plupart des développeurs ne le réalisent. Il est plus ancien que JSON, plus verbeux et plus complexe — mais aussi plus puissant dans des contextes spécifiques. Voici un guide pratique de ce qu'est réellement XML, comment il fonctionne, et quand il est encore judicieux de l'utiliser.

XML signifie eXtensible Markup Language (langage de balisage extensible). Le W3C a publié la spécification XML 1.0 en 1998, et il est devenu le format d'échange de données dominant de la première ère du web. La partie « extensible » est essentielle : contrairement à HTML qui possède un ensemble fixe de balises, XML vous permet de définir vos propres balises pour décrire n'importe quelle structure de données dont vous avez besoin.

À quoi ressemble XML

Voici un document XML complet représentant un produit d'une API e-commerce. Cet exemple couvre toutes les fonctionnalités syntaxiques essentielles que vous rencontrerez :

xml
<?xml version="1.0" encoding="UTF-8"?>
<product id="SKU-8821" inStock="true">
  <name>Wireless Noise-Cancelling Headphones</name>
  <brand>SoundCore</brand>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
    <category>Accessories</category>
  </categories>
  <specs>
    <spec name="battery">30 hours</spec>
    <spec name="connectivity">Bluetooth 5.2</spec>
    <spec name="weight">250g</spec>
  </specs>
  <description>
    Premium wireless headphones with active noise cancellation,
    30-hour battery life, and foldable design.
  </description>
</product>

Décortiquons les éléments clés. La première ligne est la déclaration XML — elle indique aux parseurs qu'il s'agit de XML 1.0 encodé en UTF-8. La balise <product> est l'élément racine (chaque document XML en possède exactement un). Les parties id et inStock sur cette même balise sont des attributs. Tout ce qui se trouve entre les balises ouvrantes et fermantes est soit des éléments enfants, des attributs, soit du contenu textuel.

Éléments vs attributs — Une vraie décision de conception

Une chose qui perturbe les nouveaux auteurs XML : vous pouvez représenter les mêmes données sous forme d'élément ou d'attribut. Ces deux représentations sont du XML valide pour la même donnée :

xml
<!-- En tant qu'attribut -->
<price currency="USD">149.99</price>

<!-- En tant qu'élément enfant -->
<price>
  <amount>149.99</amount>
  <currency>USD</currency>
</price>

La sagesse conventionnelle : utilisez les attributs pour les métadonnées de l'élément (identifiants, indicateurs, unités), et utilisez les éléments enfants pour le contenu de données réel — surtout si ce contenu risque de devenir complexe, répété, ou d'avoir besoin de ses propres attributs à l'avenir. Les attributs ne peuvent contenir que du texte brut ; les éléments enfants peuvent contenir n'importe quelle structure XML.

Bien-formé vs valide — Deux normes différentes

XML a deux niveaux de correction souvent confondus :

  • Le XML bien-formé respecte les règles syntaxiques de base : un élément racine, toutes les balises correctement fermées, attributs entre guillemets, pas de caractères illégaux. Tout parseur XML peut vérifier cela.
  • Le XML valide est conforme à un schéma spécifique — soit une DTD (Document Type Definition), soit un schéma XML (XSD). La vérification de la validité requiert à la fois le document et le schéma. Un XML peut être bien-formé sans être valide par rapport à un schéma particulier.
En pratique : la plupart des intégrations XML d'entreprise s'intéressent à la validité, pas seulement à la bonne forme. Si vous construisez une intégration SOAP ou échangez des dossiers médicaux HL7, le schéma définit exactement quels éléments sont requis, quels types ils contiennent, et quelles valeurs sont autorisées. Utilisez le Validateur XML pour vérifier rapidement la bonne forme.

Où XML apparaît dans le monde réel

  • Services web SOAP. La moitié plus ancienne des logiciels d'entreprise tourne encore sur SOAP — API bancaires, systèmes ERP, passerelles de paiement. Chaque message SOAP est un document XML bien défini avec une Envelope, un Header et un Body.
  • Flux RSS et Atom. Chaque flux de podcast, flux de site d'actualités et abonnement à une chaîne YouTube est un document XML. RSS 2.0 et Atom sont deux formats basés sur XML qui existent depuis le début des années 2000.
  • Images SVG. Scalable Vector Graphics est du XML. Lorsque vous ouvrez un fichier .svg dans un éditeur de texte, vous lisez du XML. C'est pourquoi vous pouvez styliser des SVG avec CSS et les manipuler avec JavaScript.
  • Documents Office. Un fichier .docx, .xlsx ou .pptx est une archive ZIP contenant des fichiers XML. Office Open XML est la façon dont Microsoft stocke tous les formats de documents Office modernes.
  • Layouts Android. Les layouts d'interface utilisateur Android sont définis dans des fichiers XML. Si vous avez fait du développement Android, vous avez beaucoup écrit de XML.
  • Maven et pom.xml. Le système de build Maven de Java utilise un fichier pom.xml pour définir les dépendances du projet et la configuration de build — familier à tout développeur Java.

Analyser du XML en JavaScript — DOMParser

Dans le navigateur, vous pouvez analyser des chaînes XML en utilisant l'API intégrée DOMParser. Cela fonctionne de la même façon que l'analyse HTML :

js
const xmlString = `<?xml version="1.0"?>
<product id="SKU-8821">
  <name>Wireless Headphones</name>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
  </categories>
</product>`;

const parser = new DOMParser();
const doc = parser.parseFromString(xmlString, 'application/xml');

// Vérifier les erreurs d'analyse
const parseError = doc.querySelector('parsererror');
if (parseError) {
  console.error('Erreur d'analyse XML :', parseError.textContent);
} else {
  const name = doc.querySelector('name').textContent;
  const currency = doc.querySelector('price').getAttribute('currency');
  const categories = [...doc.querySelectorAll('category')].map(el => el.textContent);

  console.log(name);       // Wireless Headphones
  console.log(currency);   // USD
  console.log(categories); // ['Electronics', 'Audio']
}

Analyser du XML en Python — ElementTree

La bibliothèque standard de Python inclut xml.etree.ElementTree — aucun paquet tiers requis pour l'analyse XML de base :

python
import xml.etree.ElementTree as ET

xml_string = """<?xml version="1.0"?>
<product id="SKU-8821">
  <name>Wireless Headphones</name>
  <price currency="USD">149.99</price>
  <categories>
    <category>Electronics</category>
    <category>Audio</category>
  </categories>
</product>"""

root = ET.fromstring(xml_string)

name = root.find('name').text
currency = root.find('price').get('currency')
categories = [el.text for el in root.findall('categories/category')]

print(name)        # Wireless Headphones
print(currency)    # USD
print(categories)  # ['Electronics', 'Audio']

Les pièges qui font trébucher les auteurs XML

  • Encodage des entités. Cinq caractères doivent être échappés dans le texte XML et les valeurs d'attributs : &&amp;, <&lt;, >&gt;, "&quot;, '&apos;. Oublier d'échapper une esperluette dans une URL brise l'ensemble du document.
  • Espaces de noms. Le XML avec espaces de noms ressemble à <soap:Envelope xmlns:soap="...">. Les requêtes sans prise en charge des espaces de noms ne trouveront pas les éléments. C'est l'un des bugs d'analyse XML les plus courants.
  • Sensibilité aux espaces blancs. Les espaces blancs entre les éléments sont techniquement significatifs en XML (contrairement à HTML). La plupart des parseurs les gèrent raisonnablement, mais cela peut causer des surprises lors de la comparaison de documents.
  • Encodage des caractères. La déclaration XML doit correspondre à l'encodage réel du fichier. Un fichier UTF-8 déclaré en ISO-8859-1 sera analysé incorrectement pour tout caractère non-ASCII.
  • Pas de type tableau natif. XML n'a pas de tableaux. Vous représentez les listes en répétant des éléments, ce qui signifie que les parseurs retournent des NodeLists plutôt que des tableaux JavaScript — convertissez toujours avec Array.from() ou le spread.

Outils XML utiles à connaître

Vous travaillez régulièrement avec XML ? Ces outils vous feront gagner du temps : Formateur XML pour afficher joliment les réponses XML minifiées, Validateur XML pour vérifier la bonne forme, XML vers JSON pour convertir les réponses XML en JSON pour une gestion plus facile, et XPath XML pour tester des requêtes XPath sur un document.

Conclusion

XML est verbeux et complexe comparé à JSON, mais ce n'est pas une simple note de bas de page héritée — c'est le fondement de SVG, des documents Office, des flux RSS, des services SOAP et des interfaces Android. Comprendre la distinction élément/attribut, la différence entre XML bien-formé et XML valide, et les pièges courants autour de l'encodage des entités et des espaces de noms vous servira bien chaque fois que XML apparaît dans votre travail. Et il apparaîtra.