YAML to XML

Převod YAML do formátu XML

Zkusit příklad

Vstup YAML

Výstup XML

Běží lokálně · Bezpečné pro vkládání tajných údajů
XML se zobrazí zde…
Vyzkoušejte také:YAML to JSON

Co je převod YAML na XML?

Převod YAML na XML transformuje data zapsaná ve formátu YAML (YAML Ain't Markup Language) do formátu XML (Extensible Markup Language). YAML používá odsazení a minimální interpunkci k reprezentaci strukturovaných dat, zatímco XML používá otevírací a zavírací tagy s explicitní hierarchií. Převod mezi oběma formáty je běžný úkol, když systémy konzumující XML potřebují přijímat data původně zapsaná v YAML.

YAML byl navržen pro čitelnost člověkem. Konfigurační soubory nástrojů jako Kubernetes, Ansible, Docker Compose a GitHub Actions jsou psány v YAML, protože je kompaktní a snadno editovatelný ručně. XML, definované specifikací W3C XML 1.0, bylo po desetiletí výchozím formátem pro výměnu dat v podnikových systémech, webových službách SOAP a dokumentově orientovaných pracovních postupech. Pokud konfigurace psaná v YAML musí vstupovat do pipeline založené na XML, je převod nezbytný.

Mapování mezi YAML a XML není přímočaré. YAML nativně podporuje datové typy jako logické hodnoty, celá čísla, čísla s plovoucí řádovou čárkou a null, zatímco XML zachází se vším obsahem jako s textem, pokud schéma (XSD nebo DTD) nedefinuje typy externě. Sekvence YAML (seznamy) nemají přímý ekvivalent v XML a musejí být reprezentovány jako opakující se elementy. Znalost těchto rozdílů pomáhá předvídat výstup a vyhnout se překvapením.

Proč použít tento převodník YAML na XML?

Ruční přepisování YAML do XML je zdlouhavé a náchylné k chybám, zejména u hluboce vnořených struktur. Tento převodník zvládne strukturální překlad okamžitě.

Okamžitý převod
Vložte YAML a ihned získejte formátovaný XML výstup. Není třeba psát skript ani instalovat CLI nástroj pro jednorázové převody.
🔒
Zpracování s důrazem na soukromí
Veškerý převod probíhá v prohlížeči. Vaše YAML data, která často obsahují adresy serverů, přihlašovací údaje a infrastrukturní detaily, nikdy neopustí vaše zařízení.
📋
Bez registrace
Používejte převodník bez registrace, přihlašování nebo zadávání e-mailu. Otevřete stránku a začněte převádět.
🌐
Zvládá vnořené struktury
Podporuje hluboce vnořená YAML mapování, sekvence, smíšené typy a víceřádkové řetězce. Výstup zachovává hierarchii s korektním odsazením XML.

Případy použití YAML na XML

Vývoj frontendu
Převeďte YAML testovací data do formátu XML pro testování XML parserů, XSLT transformací nebo komponent, které očekávají XML odpovědi z API.
Backendová integrace
Transformujte YAML konfiguraci do XML při integraci se staršími Java službami, které využívají Spring XML config, Maven POM soubory nebo SOAP endpointy.
DevOps a CI/CD
Převeďte Kubernetes nebo Ansible YAML manifesty do XML pro nástroje vyžadující XML vstup, jako jsou Jenkins pipeline konfigurace nebo určité monitorovací systémy.
QA a testování
Generujte XML testovací přípravky z YAML definic. YAML se snáze udržuje jako testovací data a převod na XML při spuštění testů zachovává přípravky čitelné.
Datové inženýrství
Převeďte YAML konfiguraci ETL nebo definice schémat do XML pro pipeline konzumující XML. Běžné ve zdravotnictví (HL7), financích (FpML) a vládních datových systémech.
Učení a prototypování
Studenti a začátečníci mohou vložit YAML a vidět ekvivalentní XML strukturu vedle sebe, což pomáhá budovat intuici o tom, jak se hierarchická data mapují mezi formáty.

Referenční tabulka mapování typů YAML na XML

Datové typy YAML se nemapují přímo do XML. Tato tabulka ukazuje, jak se každý konstrukt YAML překládá do XML ekvivalentu. Pochopení těchto pravidel pomáhá předvídat výstup a odstraňovat neočekávané výsledky.

Typ YAMLPříklad YAMLVýstup XML
Mapping (key: value){ name: Alice }<name>Alice</name>
Sequence (- item)- apple\n- banana<item>apple</item><item>banana</item>
Nested mappinguser:\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>
Nullvalue: null<value/>
Multiline stringbio: |\n Line one\n Line two<bio>Line one\nLine two</bio>

YAML vs XML: rozdíly formátů

YAML a XML řeší stejný problém — reprezentaci strukturovaných dat — s různými kompromisy. Ani jeden formát není univerzálně lepší; správná volba závisí na tom, kdo nebo co data konzumuje.

YAML
Ohraničení bílými znaky, bez zavíracích tagů. Podporuje nativní typy (bool, int, float, null). Komentáře s #. Kompaktní pro konfiguraci a ruční editaci. Parsován knihovnami jako PyYAML, js-yaml a gopkg.in/yaml.
XML
Tagová syntaxe s explicitními otevíracími a zavíracími páry. Všechny hodnoty jsou ve výchozím stavu text; typy vyžadují schéma (XSD). Podporuje atributy, jmenné prostory, smíšený obsah a instrukce zpracování. Parsován standardní knihovnou každého majoritního programovacího jazyka.
VlastnostYAMLXML
SyntaxeNa základě odsazeníTagová (&lt;tag&gt;...&lt;/tag&gt;)
Datové typyNativní (string, int, bool, null, float)Pouze text (schéma přidává typy)
Komentáře# inline komentáře<!-- blokové komentáře -->
AtributyBez nativní podporyAno (&lt;tag attr="val"&gt;)
Jmenné prostoryNepodporoványAno (xmlns:prefix)
Velikost souboruMenší (bez zavíracích tagů)Větší (výřečné tagy)

Příklady kódu

Jak převést YAML na XML programově v různých jazycích a prostředích:

JavaScript (Node.js)
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>
Python
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>
Go
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>
}
CLI (yq + xq)
# 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>

Často kladené dotazy

Lze YAML sekvence reprezentovat v XML?
Ano, ale XML nemá nativní typ seznamu. YAML sekvence se typicky převádějí na opakující se XML elementy se stejným názvem tagu. Například YAML seznam pod klíčem "items" se stane více &lt;item&gt; podřízenými elementy. Některé převodníky je zabalí do nadřazeného elementu &lt;items&gt; pro větší přehlednost.
Co se stane s YAML komentáři při převodu?
YAML komentáře (řádky začínající #) jsou při převodu zahozeny. Většina YAML parserů komentáře odstraní při budování datové struktury, takže nejsou dostupné pro XML výstup. Pokud potřebujete komentáře zachovat, budete potřebovat YAML parser, který je uchovává, například ruamel.yaml v Pythonu.
Jak jsou zpracovány YAML kotvy a aliasy?
YAML kotvy (&name) a aliasy (*name) jsou před převodem rozvinuty. Parser rozbalí aliasy na jejich úplné hodnoty, takže výsledné XML obsahuje kompletní data bez jakýchkoli odkazů na kotvy. To znamená, že XML výstup může být větší než YAML vstup, pokud byly kotvy použity k zabránění opakování.
Je převod reversibilní (XML zpět na YAML)?
Částečně. XML lze převést na YAML, ale výsledek nemusí přesně odpovídat původnímu YAML. XML atributy nemají ekvivalent v YAML a jsou typicky reprezentovány jako speciální klíče (např. @atribut). Informace o typech se také ztrácí, protože XML zachází se vším jako s textem, takže čísla a logické hodnoty z původního YAML se po zpátečním převodu stanou řetězci.
Jak zpracovat XML atributy při převodu z YAML?
YAML nemá nativní koncept atributů. Běžnou konvencí je předřadit klíčům @ pro označení, že mají být XML atributy spíše než podřízené elementy. Například "@id: 42" pod mapováním vyprodukuje &lt;element id="42"&gt;. Tuto konvenci používají knihovny jako xml-js a xmltodict.
Jaká je maximální velikost YAML souboru, kterou nástroj zvládne?
Převodník běží v prohlížeči, takže limit závisí na dostupné paměti vašeho zařízení. Soubory do několika megabajtů se na moderním hardwaru převedou bez problémů. Pro velmi velké soubory (50 MB+) použijte nástroj příkazové řádky jako yq nebo Python skript s PyYAML a lxml, které efektivněji zpracovávají streaming a paměť.
Proč moje YAML produkuje neplatný XML výstup?
Nejčastější příčinou jsou YAML klíče, které nejsou platnými názvy XML elementů. Názvy XML elementů nesmí začínat číslicí, obsahovat mezery ani většinu speciálních znaků. Klíče jako "2nd-item" nebo "my key" produkují neplatné XML. Přejmenujte problematické klíče nebo použijte převodník, který automaticky dezinfikuje názvy (např. nahrazuje mezery podtržítky a přidává podtržítko před názvy začínající číslicí).