XML to YAML

Převeďte XML do formátu YAML

Zkusit příklad

XML Vstup

YAML Výstup

Běží lokálně · Bezpečné pro vkládání tajných údajů
YAML se zobrazí zde…

Co je převod XML na YAML?

Převod XML na YAML je proces transformace dat z Extensible Markup Language (XML) do formátu YAML Ain't Markup Language (YAML). XML používá značky s úhlovými závorkami a atributy k popisu hierarchických dat, zatímco YAML reprezentuje stejné struktury prostřednictvím odsazení a párů klíč–hodnota v prostém textu. Převod XML na YAML online je běžným úkolem při migraci konfigurace ze systémů silně využívajících XML — jako Java Spring, Maven nebo .NET — na platformy upřednostňující YAML, například Kubernetes, Ansible, GitHub Actions a Docker Compose.

Oba formáty se liší svými datovými modely. XML standardně zpracovává vše jako text a pro vynucení typů spoléhá na definice schémat (XSD, DTD). YAML má nativní typy: řetězce, celá čísla, čísla s plovoucí desetinnou čárkou, booleovské hodnoty, null, sekvence (pole) a mapování (objekty). Při převodu mohou být hodnoty jako "true", "5432" nebo "3.14" interpretovány jako nativní typy YAML namísto zachování jako řetězce. Pečlivý převodník tyto hodnoty uzavírá do uvozovek, aby zachoval původní textovou reprezentaci ze zdroje XML.

XML také podporuje konstrukty, které nemají v YAML ekvivalent: atributy, jmenné prostory, zpracovatelské instrukce, sekce CDATA a komentáře. Při převodu je nutné zvolit konvenci pro reprezentaci atributů (nejčastěji klíče s předponou podtržítka, například _attr) a rozhodnout, zda ostatní konstrukty zahrnout nebo zploštit. Pochopení těchto kompromisů před samotným převodem vám pomůže vybrat správný nástroj, správně ho nakonfigurovat a ověřit, že výstup YAML odpovídá původnímu záměru 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

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

Psaní převodního skriptu ručně znamená řešit mapování atributů, detekci polí u opakujících se prvků a hraniční případy typové konverze v YAML. Převodník v prohlížeči zvládne vše najednou a umožní vám zkontrolovat výstup YAML a zkopírovat ho přímo do konfiguračních souborů.

Okamžitý převod
Vložte XML a získejte výstup YAML v milisekundách. Není třeba instalovat knihovnu, psát build skript ani spravovat žádný skript.
🔒
Zpracování zaměřené na soukromí
Převod probíhá zcela ve vašem prohlížeči pomocí JavaScriptu. Vaše XML data zůstávají ve vašem počítači a nikdy se neodesílají na žádný server.
🔀
Zpracovává atributy a pole
Atributy XML jsou mapovány na klíče s předponou. Opakující se sourozenecké prvky jsou automaticky seskupeny do sekvencí YAML, takže struktura seznamů je zachována.
📋
Bez účtu
Otevřete stránku, vložte XML, zkopírujte výsledek YAML. Žádná registrace, žádný API klíč, žádné limity použití.

Případy použití převodníku XML na YAML

Vývoj frontendu
Převeďte úryvky XML konfigurace ze starších build nástrojů (Ant, Maven) do YAML pro moderní CI pipeline jako GitHub Actions nebo GitLab CI, které očekávají konfigurační soubory v YAML.
Backendové inženýrství
Migrujte definice Spring XML bean do formátu application.yml pro Spring Boot nebo převeďte části .NET app.config do YAML pro nasazení v kontejnerech.
DevOps a infrastruktura
Transformujte XML deskriptory nasazení (Tomcat server.xml, IIS web.config) na ekvivalenty v YAML pro Kubernetes manifesty, Helm chart nebo Ansible playbook.
QA a testování
Převeďte XML testovací přípravky nebo konfiguraci JUnit do YAML pro testovací frameworky podporující datové zdroje v YAML — například pytest s YAML přípravky nebo Robot Framework.
Datové inženýrství
Transformujte XML exporty dat z podnikových systémů (SAP, Oracle) do YAML pro zpracování ETL nástroji jako dbt nebo Airflow, které používají konfiguraci a schémata v YAML.
Výuka a dokumentace
Studenti a technický autoři mohou vkládat ukázky XML a sledovat, jak se prvky, atributy a zanořování mapují na odsazení, sekvence a mapování v YAML.

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

XML a YAML mají odlišné datové modely. Tabulka níže ukazuje, jak se každý konstrukt XML mapuje na ekvivalent v YAML. Atributy jsou typicky převáděny na klíče s předponou podtržítka a opakující se prvky se stávají sekvencemi YAML. Některé konstrukty, například komentáře a zpracovatelské instrukce, nemají v YAML reprezentaci a při převodu jsou zahozeny.

Konstrukt XMLPříklad XMLEkvivalent 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: rozdíly datových modelů

Převod mezi XML a YAML není pouhá záměna syntaxe. Formáty mají zásadní strukturální rozdíly, které ovlivňují způsob reprezentace dat po převodu.

Typový systém
XML ukládá všechny hodnoty jako textové řetězce. YAML má nativní booleovské hodnoty, celá čísla, čísla s plovoucí desetinnou čárkou a null. Při převodu může být hodnota jako "true" nebo "3306" přeinterpretována jako booleovský typ nebo celé číslo v YAML, pokud ji převodník neuzavře do uvozovek. Vždy ověřte typově citlivé hodnoty ve výstupu.
Atributy vs klíče
Prvky XML mohou mít atributy vedle podřízených prvků a textového obsahu. YAML má pouze mapování klíč–hodnota. Atributy musí být převedeny na běžné klíče, typicky s předponou _ nebo @ pro odlišení od podřízených prvků.
Pořadí a duplicity
XML zachovává pořadí dokumentu a umožňuje sourozenecké prvky se stejným názvem značky. Mapování YAML jsou dle specifikace neuspořádaná (ačkoli většina parserů zachovává pořadí vložení) a duplicitní klíče jsou v YAML 1.2 zakázány. Opakující se prvky XML se musí stát sekvencí YAML.

Ukázky kódu

Níže jsou funkční příklady pro převod XML na YAML v JavaScriptu, Pythonu, Go a na příkazovém řádku. Každý příklad zpracovává vnořené prvky, atributy a opakující se sourozenecké značky.

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
}

Často kladené otázky

Je převod XML na YAML bezeztrátový?
Ne zcela. Atributy XML, komentáře, zpracovatelské instrukce a sekce CDATA nemají nativní ekvivalent v YAML. Atributy lze zachovat jako klíče s předponou (_attr nebo @attr), ale komentáře a zpracovatelské instrukce jsou zahozeny. Pokud potřebujete zpětný převod do XML, ověřte, že atributy a deklarace jmenných prostorů byly při převodu zachovány.
Jak jsou atributy XML reprezentovány v YAML?
Většina převodníků přidává před názvy atributů podtržítko (_) nebo symbol @ pro jejich odlišení od klíčů podřízených prvků. Například <server port="8080"> se stane server:\n _port: "8080". Konkrétní předpona závisí na použité knihovně nebo nástroji.
Co se děje s opakujícími se prvky XML při převodu?
Pokud se stejná značka prvku vyskytuje vícekrát pod jedním rodičem, převodník je seskupí do sekvence YAML (seznamu). Například dva sourozenecké prvky <item> se stanou item:\n - value1\n - value2. Jediný prvek <item> zůstane jako skalární hodnota, pokud není zapnut režim vynuceného pole.
Mohu převést YAML zpět na XML?
Ano, ale výsledek závisí na tom, jak původní převod zpracoval atributy a typy. Pokud byly atributy zachovány s klíči s předponou, může je převodník YAML na XML obnovit. ToolDeck nabízí nástroj YAML na XML pro zpětný převod. Mějte na paměti, že nativní typy YAML (booleovské hodnoty, čísla) se v XML stanou textovými řetězci.
Proč výstup YAML uzavírá některé hodnoty do uvozovek?
YAML má nativní typy: true/false jsou booleovské hodnoty, čísla bez uvozovek se stávají celými čísly nebo čísly s plovoucí desetinnou čárkou a yes/no/on/off jsou v YAML 1.1 také booleovské hodnoty. Pokud vaše XML obsahuje text jako "true" nebo "3306", který má zůstat řetězcem, převodník ho uzavře do uvozovek, aby parsery YAML hodnotu nepřeinterpretovaly. Jde o správné chování, nikoli o chybu.
Jak zpracovat velké XML soubory?
Převodníky v prohlížeči fungují dobře pro soubory do několika megabajtů. Pro větší soubory (10 MB a více) použijte streamovací přístup: parsujte XML pomocí iterparse v Pythonu nebo sax v Node.js, budujte mezilehlý objekt postupně a poté serializujte do YAML. Nástroj yq může také převádět XML na YAML přímo z příkazového řádku, aniž by načítal celý dokument do paměti.
Jaký je rozdíl mezi převodem XML na YAML a převodem XML na JSON?
Oba převody čelí stejné výzvě: mapování atributů XML a opakujících se prvků do jiného datového modelu. Hlavní rozdíl spočívá ve výstupním formátu. JSON je striktní (bez komentářů, explicitní typy, přísná syntaxe), zatímco YAML je nadmnožinou JSON, která přidává funkce přívětivé pro člověka: komentáře, víceřádkové řetězce, kotvy a aliasy. Zvolte JSON, pokud je příjemcem API nebo JavaScript prostředí. Zvolte YAML, pokud je příjemcem člověk upravující konfigurační soubory.