ToolDeck

XML vers YAML

Convertit XML au format YAML

Essayer un exemple

Entrée XML

Sortie YAML

Fonctionne localement · Sûr pour coller des secrets
Le YAML apparaîtra ici…

Qu'est-ce que la conversion XML vers YAML ?

La conversion XML vers YAML transforme des données depuis le langage de balisage extensible (XML) vers YAML Ain't Markup Language (YAML). XML utilise des balises entre chevrons avec des attributs pour décrire des données hiérarchiques, tandis que YAML représente les mêmes structures via l'indentation et des paires clé-valeur en texte brut. Convertir XML vers YAML en ligne est une tâche courante lors de la migration de configurations depuis des systèmes fortement XML comme Java Spring, Maven ou .NET vers des plateformes qui préfèrent YAML, telles que Kubernetes, Ansible, GitHub Actions et Docker Compose.

Les deux formats diffèrent dans leurs modèles de données. XML traite tout comme du texte par défaut et s'appuie sur des définitions de schéma (XSD, DTD) pour l'application des types. YAML dispose de types natifs : chaînes, entiers, flottants, booléens, nulls, séquences (tableaux) et mappings (objets). Lors de la conversion, des valeurs comme "true", "5432" et "3.14" peuvent être interprétées comme des types natifs YAML au lieu de rester des chaînes. Un convertisseur soigneux met ces valeurs entre guillemets pour préserver la représentation textuelle d'origine de la source XML.

XML prend également en charge des constructs sans équivalent YAML : attributs, espaces de noms, instructions de traitement, sections CDATA et commentaires. La conversion doit choisir une convention pour représenter les attributs (généralement des clés préfixées par un underscore, comme _attr) et décider de rejeter ou d'aplatir le reste. Comprendre ces compromis avant de convertir vous aide à choisir le bon outil, à le configurer correctement et à vérifier que la sortie YAML correspond à l'intention originale du XML.

XML input
<server>
  <host>db.example.com</host>
  <port>5432</port>
  <credentials admin="true">
    <username>deploy</username>
    <password>s3cret</password>
  </credentials>
  <options>
    <option>ssl=true</option>
    <option>timeout=30</option>
  </options>
</server>
YAML output
server:
  host: db.example.com
  port: "5432"
  credentials:
    _admin: "true"
    username: deploy
    password: s3cret
  options:
    option:
      - ssl=true
      - timeout=30

Pourquoi utiliser un convertisseur XML vers YAML en ligne ?

Écrire un script de conversion manuellement implique de gérer le mapping des attributs, la détection des tableaux pour les éléments répétés et les cas limites de coercition de types YAML. Un convertisseur dans le navigateur gère tout cela en une seule étape, vous permettant d'inspecter la sortie YAML et de la copier directement dans vos fichiers de configuration.

Conversion instantanée
Collez votre XML et obtenez une sortie YAML en quelques millisecondes. Pas d'installation de bibliothèque, pas d'étape de build, pas de script à maintenir.
🔒
Traitement respectueux de la confidentialité
La conversion s'exécute entièrement dans votre navigateur via JavaScript. Vos données XML restent sur votre machine et ne sont jamais envoyées à un serveur.
🔀
Gère attributs et tableaux
Les attributs XML sont mappés à des clés préfixées. Les éléments frères répétés sont regroupés automatiquement en séquences YAML, préservant les structures de listes.
📋
Sans compte requis
Ouvrez la page, collez votre XML, copiez le résultat YAML. Pas d'inscription, pas de clé API, pas de limites d'utilisation.

Cas d'utilisation de la conversion XML vers YAML

Développement frontend
Convertissez des extraits de configuration XML issus d'outils de build legacy (Ant, Maven) en YAML pour des pipelines CI modernes comme GitHub Actions ou GitLab CI qui attendent des fichiers de configuration YAML.
Ingénierie backend
Migrez les définitions de beans XML Spring vers le format application.yml de Spring Boot, ou convertissez des sections app.config .NET en YAML pour les déploiements en conteneurs.
DevOps et infrastructure
Transformez des descripteurs de déploiement XML (Tomcat server.xml, IIS web.config) en équivalents YAML pour des manifests Kubernetes, des charts Helm ou des playbooks Ansible.
QA et tests
Convertissez des jeux de données XML ou des configurations JUnit en YAML pour des frameworks de test qui prennent en charge les sources de données YAML, comme pytest avec des fixtures YAML ou Robot Framework.
Ingénierie des données
Transformez des exports de données XML depuis des systèmes d'entreprise (SAP, Oracle) en YAML pour l'ingestion par des outils ETL comme dbt ou Airflow qui utilisent des configurations et schémas basés sur YAML.
Apprentissage et documentation
Les étudiants et les rédacteurs techniques peuvent coller des exemples XML pour voir comment les éléments, les attributs et l'imbrication se traduisent en indentation YAML, séquences et mappings.

Référence de correspondance XML vers YAML

XML et YAML ont des modèles de données différents. Le tableau ci-dessous montre comment chaque construct XML correspond à un équivalent YAML. Les attributs sont généralement convertis en clés préfixées par un underscore, et les éléments répétés deviennent des séquences YAML. Certains constructs comme les commentaires et les instructions de traitement n'ont pas de représentation YAML et sont écartés lors de la conversion.

Construct XMLExemple XMLÉquivalent YAML
Element<name>text</name>name: text
Nested elements<a><b>1</b></a>a:\n b: "1"
Attributes<el attr="v"/>el:\n _attr: v
Text + attributes<el a="1">text</el>el:\n _a: "1"\n _text: text
Repeated elements<r><i>1</i><i>2</i></r>r:\n i:\n - "1"\n - "2"
Empty element<el/>el: ""
CDATA<![CDATA[raw]]>Treated as plain text
Comments<!-- note -->Discarded (no YAML equivalent)
Namespacesxmlns:ns="uri"Prefix preserved or stripped
Boolean-like text<flag>true</flag>flag: "true" (quoted to stay string)

XML vs YAML : différences de modèles de données

Convertir entre XML et YAML n'est pas un simple changement de syntaxe. Les formats ont des différences structurelles fondamentales qui affectent la représentation des données après conversion.

Système de types
XML stocke toutes les valeurs comme des chaînes de texte. YAML dispose de booléens, entiers, flottants et nulls natifs. Lors de la conversion, une valeur comme "true" ou "3306" peut être réinterprétée comme un booléen ou un entier YAML si le convertisseur ne la met pas entre guillemets. Vérifiez toujours les valeurs sensibles au type dans la sortie.
Attributs vs clés
Les éléments XML peuvent porter des attributs en plus des éléments enfants et du contenu textuel. YAML ne dispose que de mappings clé-valeur. Les attributs doivent être convertis en clés ordinaires, généralement avec un préfixe comme _ ou @ pour les distinguer des éléments enfants.
Ordre et doublons
XML préserve l'ordre du document et autorise les éléments frères portant le même nom de balise. Les mappings YAML sont non ordonnés selon la spécification (bien que la plupart des analyseurs préservent l'ordre d'insertion), et les clés en double sont interdites en YAML 1.2. Les éléments XML répétés doivent devenir une séquence YAML.

Exemples de code

Voici des exemples fonctionnels pour convertir XML en YAML en JavaScript, Python, Go et en ligne de commande. Chaque exemple gère les éléments imbriqués, les attributs et les balises frères répétées.

JavaScript (Node.js)
import { parseStringPromise } from 'xml2js'
import YAML from 'yaml'

const xml = `
<config>
  <database host="localhost" port="5432">
    <name>mydb</name>
  </database>
  <features>
    <feature>auth</feature>
    <feature>logging</feature>
  </features>
</config>`

const obj = await parseStringPromise(xml, { explicitArray: false })
console.log(YAML.stringify(obj))
// → config:
// →   database:
// →     $:
// →       host: localhost
// →       port: "5432"
// →     name: mydb
// →   features:
// →     feature:
// →       - auth
// →       - logging
Python
import xmltodict
import yaml

xml = """
<server>
  <host>db.example.com</host>
  <port>5432</port>
  <replicas>
    <replica>node-1</replica>
    <replica>node-2</replica>
  </replicas>
</server>
"""

# Step 1: XML → Python dict
data = xmltodict.parse(xml)

# Step 2: Python dict → YAML
print(yaml.dump(data, default_flow_style=False))
# → server:
# →   host: db.example.com
# →   port: '5432'
# →   replicas:
# →     replica:
# →     - node-1
# →     - node-2

# With the standard library only (no xmltodict)
import xml.etree.ElementTree as ET

def elem_to_dict(elem):
    d = {}
    if elem.attrib:
        d.update({f"_{k}": v for k, v in elem.attrib.items()})
    for child in elem:
        val = elem_to_dict(child)
        if child.tag in d:
            if not isinstance(d[child.tag], list):
                d[child.tag] = [d[child.tag]]
            d[child.tag].append(val)
        else:
            d[child.tag] = val
    if elem.text and elem.text.strip():
        text = elem.text.strip()
        return text if not d else {**d, "_text": text}
    return d

root = ET.fromstring(xml)
print(yaml.dump({root.tag: elem_to_dict(root)}, default_flow_style=False))
CLI (xq + yq)
# xq is part of the yq package (pip install yq)
# It parses XML via xq and outputs JSON, then pipe to yq for YAML

echo '<config><host>localhost</host><port>8080</port></config>' | xq . | yq -y .
# → config:
# →   host: localhost
# →   port: "8080"

# Using xmlstarlet + yq (Go version: https://github.com/mikefarah/yq)
xmlstarlet sel -t -c '/' input.xml | yq -p=xml -o=yaml
# Reads XML from file and outputs YAML directly
Go
package main

import (
	"encoding/xml"
	"fmt"
	"strings"

	"gopkg.in/yaml.v3"
)

type Server struct {
	XMLName xml.Name `xml:"server"`
	Host    string   `xml:"host" yaml:"host"`
	Port    int      `xml:"port" yaml:"port"`
	Options []string `xml:"options>option" yaml:"options"`
}

func main() {
	data := `<server>
		<host>db.example.com</host>
		<port>5432</port>
		<options><option>ssl=true</option><option>timeout=30</option></options>
	</server>`

	var srv Server
	xml.NewDecoder(strings.NewReader(data)).Decode(&srv)

	out, _ := yaml.Marshal(srv)
	fmt.Println(string(out))
	// → host: db.example.com
	// → port: 5432
	// → options:
	// →   - ssl=true
	// →   - timeout=30
}

Questions fréquemment posées

La conversion XML vers YAML est-elle sans perte ?
Pas totalement. Les attributs XML, les commentaires, les instructions de traitement et les sections CDATA n'ont pas d'équivalent natif en YAML. Les attributs peuvent être préservés comme clés préfixées (_attr ou @attr), mais les commentaires et les instructions de traitement sont écartés. Si vous avez besoin de revenir en XML, vérifiez que les attributs et les déclarations d'espaces de noms ont survécu à la conversion.
Comment les attributs XML sont-ils représentés en YAML ?
La plupart des convertisseurs préfixent les noms d'attributs par un underscore (_) ou le symbole @ pour les séparer des clés d'éléments enfants. Par exemple, <server port="8080"> devient server:\n _port: "8080". Le préfixe spécifique dépend de la bibliothèque ou de l'outil utilisé.
Que se passe-t-il avec les éléments XML répétés lors de la conversion ?
Lorsque la même balise apparaît plusieurs fois sous un même parent, le convertisseur les regroupe dans une séquence YAML (liste). Par exemple, deux éléments frères <item> deviennent item:\n - valeur1\n - valeur2. Un seul <item> reste une valeur scalaire sauf si le mode force-tableau est activé.
Puis-je convertir YAML en XML ?
Oui, mais le résultat dépend de la façon dont la conversion initiale a géré les attributs et les types. Si les attributs ont été préservés avec des clés préfixées, un convertisseur YAML vers XML peut les reconstruire. ToolDeck dispose d'un outil YAML vers XML pour la direction inverse. Notez que les types natifs YAML (booléens, nombres) deviendront des chaînes de texte en XML.
Pourquoi la sortie YAML met-elle certaines valeurs entre guillemets ?
YAML dispose de types natifs : true/false sont des booléens, les nombres nus deviennent des entiers ou des flottants, et yes/no/on/off sont également des booléens en YAML 1.1. Si votre XML contient du texte comme "true" ou "3306" qui doit rester une chaîne, le convertisseur le met entre guillemets pour empêcher les analyseurs YAML de réinterpréter la valeur. C'est un comportement correct, pas une erreur.
Comment gérer les fichiers XML volumineux ?
Les convertisseurs dans le navigateur fonctionnent bien pour des fichiers jusqu'à quelques mégaoctets. Pour les fichiers plus grands (10 Mo et plus), utilisez une approche en flux : analysez le XML avec iterparse de Python ou sax pour Node.js, construisez l'objet intermédiaire de façon incrémentielle, puis sérialisez en YAML. L'outil yq peut également convertir XML en YAML directement depuis la ligne de commande sans charger l'intégralité du document en mémoire.
Quelle est la différence entre la conversion XML vers YAML et XML vers JSON ?
Les deux conversions font face au même défi de mapping des attributs XML et des éléments répétés vers un modèle de données différent. La principale différence réside dans le format de sortie. JSON est strict (pas de commentaires, types explicites, syntaxe rigide), tandis que YAML est un sur-ensemble de JSON qui ajoute des fonctionnalités adaptées à la lecture humaine : commentaires, chaînes multiligne, ancres et alias. Choisissez JSON quand le consommateur est une API ou un environnement d'exécution JavaScript. Choisissez YAML quand le consommateur est un développeur qui édite des fichiers de configuration.