YAML to XML
Konvertera YAML till XML-format
YAML Inmatning
XML Utmatning
Vad är YAML till XML-konvertering?
YAML till XML-konvertering omvandlar data skriven i YAML (YAML Ain't Markup Language) till XML (Extensible Markup Language). YAML använder indragning och minimal interpunktion för att representera strukturerad data, medan XML använder öppnings- och stängningstaggar med en explicit hierarki. Att konvertera mellan de två formaten är en rutinuppgift när system som konsumerar XML behöver ta emot data som ursprungligen skapades i YAML.
YAML designades för mänsklig läsbarhet. Konfigurationsfiler för verktyg som Kubernetes, Ansible, Docker Compose och GitHub Actions skrivs i YAML eftersom formatet är kompakt och enkelt att redigera för hand. XML, definierat av W3C XML 1.0-specifikationen, har i decennier varit standardformatet för datautbyte i enterprise-system, SOAP-webbtjänster och dokumentcentrerade arbetsflöden. När en YAML-baserad konfiguration måste matas in i en XML-baserad pipeline krävs konvertering.
Mappningen mellan YAML och XML är inte en-till-en. YAML stöder datatyper som booleaner, heltal, flyttal och null-värden inbyggt, medan XML behandlar allt innehåll som text om inte ett schema (XSD eller DTD) definierar typer externt. YAML-sekvenser (listor) har ingen direkt XML-motsvarighet och måste representeras som upprepade element. Att känna till dessa skillnader hjälper dig förutsäga utdata och undvika oväntade resultat.
Varför använda den här YAML till XML-konverteraren?
Att manuellt skriva om YAML som XML är tidskrävande och felkänsligt, särskilt för djupt kapslade strukturer. Den här konverteraren hanterar den strukturella översättningen direkt.
Användningsfall för YAML till XML
Typmappningsreferens: YAML till XML
YAML-datatyper mappas inte direkt till XML. Tabellen nedan visar hur varje YAML-konstruktion översätts till sin XML-motsvarighet. Att förstå dessa regler hjälper dig förutsäga utdata och felsöka oväntade resultat.
| YAML-typ | YAML-exempel | XML-utdata |
|---|---|---|
| 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: Formatskillnader
YAML och XML löser samma problem — strukturerad datarepresentation — men med olika avvägningar. Inget är universellt bättre; det rätta valet beror på vem eller vad som konsumerar datan.
| Egenskap | YAML | XML |
|---|---|---|
| Syntax | Indragningsbaserad | Taggbaserad (<tagg>...</tagg>) |
| Datatyper | Inbyggda (sträng, int, bool, null, float) | Endast text (schema lägger till typer) |
| Kommentarer | # inline-kommentarer | <!-- blockkommentarer --> |
| Attribut | Inget inbyggt stöd | Ja (<tagg attr="värde">) |
| Namnrymder | Stöds inte | Ja (xmlns:prefix) |
| Filstorlek | Mindre (inga stängningstaggar) | Större (utförliga taggar) |
Kodexempel
Hur man konverterar YAML till XML programmatiskt i olika språk och miljöer:
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>