YAML vers XML
Convertit YAML au format XML
Entrée YAML
Sortie XML
Qu'est-ce que la conversion YAML vers XML ?
La conversion YAML vers XML transforme des données écrites en YAML (YAML Ain't Markup Language) vers XML (Extensible Markup Language). YAML utilise l'indentation et une ponctuation minimale pour représenter des données structurées, tandis que XML utilise des balises ouvrantes et fermantes avec une hiérarchie explicite. Convertir entre les deux est une tâche courante lorsque des systèmes qui consomment du XML doivent recevoir des données initialement rédigées en YAML.
YAML a été conçu pour la lisibilité humaine. Les fichiers de configuration d'outils comme Kubernetes, Ansible, Docker Compose et GitHub Actions sont écrits en YAML car il est compact et facile à modifier à la main. XML, défini par la spécification W3C XML 1.0, est le format d'échange de données par défaut dans les systèmes d'entreprise, les services web SOAP et les workflows centrés sur les documents depuis des décennies. Lorsqu'une configuration rédigée en YAML doit alimenter un pipeline basé sur XML, la conversion est nécessaire.
Le mapping entre YAML et XML n'est pas bijection. YAML prend en charge nativement des types de données comme les booléens, les entiers, les flottants et null, tandis que XML traite tout le contenu comme du texte sauf si un schéma (XSD ou DTD) définit les types en externe. Les séquences YAML (listes) n'ont pas d'équivalent XML direct et doivent être représentées comme des éléments répétés. Comprendre ces différences vous aide à anticiper la sortie et à éviter les surprises.
Pourquoi utiliser ce convertisseur YAML vers XML ?
Réécrire manuellement du YAML en XML est fastidieux et source d'erreurs, surtout pour les structures profondément imbriquées. Ce convertisseur gère la traduction structurelle instantanément.
Cas d'utilisation YAML vers XML
Référence de correspondance YAML vers XML
Les types de données YAML ne se mappent pas directement en XML. Ce tableau montre comment chaque construct YAML se traduit en équivalent XML. Comprendre ces règles vous aide à anticiper la sortie et à résoudre des résultats inattendus.
| Type YAML | Exemple YAML | Sortie XML |
|---|---|---|
| Mapping (key: value) | { name: Alice } | <name>Alice</name> |
| Sequence (- item) | - apple\n- banana | <item>apple</item><item>banana</item> |
| Nested mapping | user:\n name: Alice | <user><name>Alice</name></user> |
| Scalar (string) | greeting: hello world | <greeting>hello world</greeting> |
| Scalar (number) | count: 42 | <count>42</count> |
| Scalar (boolean) | active: true | <active>true</active> |
| Null | value: null | <value/> |
| Multiline string | bio: |\n Line one\n Line two | <bio>Line one\nLine two</bio> |
YAML vs XML : différences de format
YAML et XML résolvent le même problème — la représentation de données structurées — avec des compromis différents. Ni l'un ni l'autre n'est universellement supérieur ; le bon choix dépend de ce qui consomme les données.
| Fonctionnalité | YAML | XML |
|---|---|---|
| Syntaxe | Basée sur l'indentation | Basée sur les balises (<balise>...</balise>) |
| Types de données | Natifs (string, int, bool, null, float) | Texte uniquement (le schéma ajoute les types) |
| Commentaires | # commentaires inline | <!-- commentaires bloc --> |
| Attributs | Pas de support natif | Oui (<balise attr="val">) |
| Espaces de noms | Non pris en charge | Oui (xmlns:prefix) |
| Taille du fichier | Plus petit (pas de balises fermantes) | Plus grand (balises verbeux) |
Exemples de code
Comment convertir YAML vers XML par programmation dans différents langages et environnements :
import { parseDocument } from 'yaml'
import { js2xml } from 'xml-js'
const yamlStr = `
server:
host: localhost
port: 8080
ssl: true
`
const data = parseDocument(yamlStr).toJSON()
const xml = js2xml({ root: data }, { compact: true, spaces: 2 })
console.log(xml)
// → <root>
// → <server>
// → <host>localhost</host>
// → <port>8080</port>
// → <ssl>true</ssl>
// → </server>
// → </root>import yaml
import xml.etree.ElementTree as ET
yaml_str = """
database:
host: db.example.com
port: 5432
credentials:
user: admin
password: secret
"""
data = yaml.safe_load(yaml_str)
def dict_to_xml(tag, d):
elem = ET.Element(tag)
for key, val in d.items():
child = ET.SubElement(elem, key)
if isinstance(val, dict):
child.extend(dict_to_xml(key, val))
elem.remove(child)
elem.append(dict_to_xml(key, val))
else:
child.text = str(val)
return elem
root = dict_to_xml('root', data)
ET.indent(root, space=' ')
print(ET.tostring(root, encoding='unicode'))
# → <root>
# → <database>
# → <host>db.example.com</host>
# → <port>5432</port>
# → ...
# → </database>
# → </root>package main
import (
"encoding/xml"
"fmt"
"gopkg.in/yaml.v3"
)
type Server struct {
XMLName xml.Name `xml:"server"`
Host string `yaml:"host" xml:"host"`
Port int `yaml:"port" xml:"port"`
SSL bool `yaml:"ssl" xml:"ssl"`
}
func main() {
yamlData := []byte("host: localhost\nport: 8080\nssl: true")
var s Server
yaml.Unmarshal(yamlData, &s)
xmlBytes, _ := xml.MarshalIndent(s, "", " ")
fmt.Println(xml.Header + string(xmlBytes))
// → <?xml version="1.0" encoding="UTF-8"?>
// → <server>
// → <host>localhost</host>
// → <port>8080</port>
// → <ssl>true</ssl>
// → </server>
}# Using yq (YAML processor) with xq (XML wrapper around jq) # Install: pip install yq # Convert YAML file to XML yq -x . config.yaml # → <host>localhost</host><port>8080</port> # Pipe inline YAML through conversion echo "name: Alice" | yq -x . # → <name>Alice</name>