YAML to XML
Converteer YAML naar XML formaat
YAML Invoer
XML Uitvoer
Wat is YAML naar XML-conversie?
YAML naar XML-conversie zet gegevens om die zijn geschreven in YAML (YAML Ain't Markup Language) naar XML (Extensible Markup Language). YAML gebruikt inspringing en minimale interpunctie om gestructureerde gegevens weer te geven, terwijl XML gebruikmaakt van openings- en sluitingstags met een expliciete hiërarchie. Converteren tussen de twee is een veelvoorkomende taak wanneer systemen die XML verwerken gegevens moeten ontvangen die oorspronkelijk in YAML zijn geschreven.
YAML is ontworpen voor menselijke leesbaarheid. Configuratiebestanden voor tools zoals Kubernetes, Ansible, Docker Compose en GitHub Actions zijn geschreven in YAML omdat het compact is en gemakkelijk met de hand te bewerken. XML, gedefinieerd door de W3C XML 1.0-specificatie, is al tientallen jaren het standaard gegevensuitwisselingsformaat in bedrijfssystemen, SOAP-webservices en documentgerichte workflows. Wanneer een YAML-configuratie moet worden ingevoerd in een XML-gebaseerde pipeline, is conversie vereist.
De koppeling tussen YAML en XML is niet één-op-één. YAML ondersteunt native gegevenstypen zoals booleans, gehele getallen, kommagetallen en null, terwijl XML alle inhoud als tekst behandelt tenzij een schema (XSD of DTD) typen extern definieert. YAML-reeksen (lijsten) hebben geen directe XML-equivalent en moeten worden weergegeven als herhaalde elementen. Kennis van deze verschillen helpt u de uitvoer te voorspellen en verrassingen te vermijden.
Waarom deze YAML naar XML-converter gebruiken?
YAML handmatig herschrijven als XML is tijdrovend en foutgevoelig, vooral bij diep geneste structuren. Deze converter verwerkt de structurele vertaling direct.
Toepassingen van YAML naar XML-conversie
Toewijzingsreferentie voor YAML- naar XML-typen
YAML-gegevenstypen worden niet rechtstreeks naar XML omgezet. De tabel hieronder toont hoe elke YAML-constructie vertaalt naar een XML-equivalent. Inzicht in deze regels helpt u de uitvoer te voorspellen en onverwachte resultaten op te lossen.
| YAML-type | YAML-voorbeeld | XML-uitvoer |
|---|---|---|
| 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 versus XML: formaatverschillen
YAML en XML lossen hetzelfde probleem op — gestructureerde gegevensweergave — met verschillende afwegingen. Geen van beide is universeel beter; de juiste keuze hangt af van wie of wat de gegevens verwerkt.
| Kenmerk | YAML | XML |
|---|---|---|
| Syntaxis | Inspringing-gebaseerd | Op tags gebaseerd (<tag>...</tag>) |
| Gegevenstypen | Native (tekenreeks, int, bool, null, float) | Alleen tekst (schema voegt typen toe) |
| Opmerkingen | # inline opmerkingen | <!-- blokopmerkingen --> |
| Attributen | Geen native ondersteuning | Ja (<tag attr="val">) |
| Naamruimten | Niet ondersteund | Ja (xmlns:prefix) |
| Bestandsgrootte | Kleiner (geen sluitingstags) | Groter (uitgebreide tags) |
Codevoorbeelden
Hoe YAML programmatisch naar XML te converteren in verschillende talen en omgevingen:
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>