XML na YAML

Konwertuj XML do formatu YAML

Wypróbuj przykład

Wejście XML

Wyjście YAML

Działa lokalnie · Bezpieczne do wklejania sekretów
YAML pojawi się tutaj…

Czym jest konwersja XML na YAML?

Konwersja XML na YAML to przekształcanie danych z formatu Extensible Markup Language (XML) do YAML Ain't Markup Language (YAML). XML używa tagów w nawiasach ostrych z atrybutami do opisywania danych hierarchicznych, natomiast YAML reprezentuje te same struktury za pomocą wcięć i par klucz-wartość w postaci zwykłego tekstu. Konwersja XML na YAML online to częste zadanie przy migracji konfiguracji z systemów opartych na XML, takich jak Java Spring, Maven czy .NET, do platform preferujących YAML — Kubernetes, Ansible, GitHub Actions i Docker Compose.

Oba formaty różnią się modelami danych. XML traktuje wszystko domyślnie jako tekst i polega na definicjach schematu (XSD, DTD) w celu wymuszania typów. YAML ma typy natywne: łańcuchy znaków, liczby całkowite, liczby zmiennoprzecinkowe, wartości logiczne, wartości null, sekwencje (tablice) i odwzorowania (obiekty). Podczas konwersji wartości takie jak "true", "5432" czy "3.14" mogą być interpretowane jako typy natywne YAML zamiast pozostawać łańcuchami znaków. Staranny konwerter cytuje te wartości, aby zachować oryginalną reprezentację tekstową ze źródłowego XML.

XML obsługuje też konstrukcje niemające odpowiednika w YAML: atrybuty, przestrzenie nazw, instrukcje przetwarzania, sekcje CDATA i komentarze. Konwersja musi przyjąć konwencję reprezentowania atrybutów (zazwyczaj klucze z prefiksem podkreślenia, np. _attr) i zdecydować, czy pozostałe elementy odrzucić, czy spłaszczyć. Zrozumienie tych kompromisów przed konwersją pomaga wybrać właściwe narzędzie, skonfigurować je poprawnie i zweryfikować, czy wyjście YAML odpowiada zamierzeniu oryginalnego 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

Dlaczego warto używać internetowego konwertera XML na YAML?

Pisanie skryptu konwersji od podstaw oznacza ręczne obsługiwanie mapowania atrybutów, wykrywania tablic dla powtarzających się elementów oraz specyficznych przypadków konwersji typów YAML. Konwerter działający w przeglądarce obsługuje to wszystko jednym krokiem, pozwalając na natychmiastowe sprawdzenie wyjścia YAML i skopiowanie go do pliku konfiguracyjnego.

Natychmiastowa konwersja
Wklej XML i otrzymaj wyjście YAML w ciągu milisekund. Bez instalacji biblioteki, bez kroku kompilacji, bez skryptu do utrzymania.
🔒
Przetwarzanie z priorytetem prywatności
Konwersja odbywa się w całości w przeglądarce przy użyciu JavaScript. Dane XML pozostają na Twoim urządzeniu i nie są przesyłane na żaden serwer.
🔀
Obsługa atrybutów i tablic
Atrybuty XML są mapowane na klucze z prefiksem. Powtarzające się elementy rodzeństwa są automatycznie grupowane w sekwencje YAML, zachowując strukturę listy.
📋
Bez konta
Otwórz stronę, wklej XML i skopiuj wynik YAML. Bez rejestracji, klucza API ani limitów użycia.

Zastosowania konwertera XML na YAML

Programowanie frontendowe
Konwertuj fragmenty konfiguracji XML ze starszych narzędzi kompilacji (Ant, Maven) na YAML dla nowoczesnych potoków CI, takich jak GitHub Actions lub GitLab CI, które wymagają plików konfiguracyjnych w formacie YAML.
Programowanie backendowe
Migruj definicje bean Spring XML do formatu application.yml w Spring Boot lub konwertuj sekcje .NET app.config na YAML dla wdrożeń kontenerowych.
DevOps i infrastruktura
Przekształcaj deskryptory wdrożeń opartych na XML (Tomcat server.xml, IIS web.config) na odpowiedniki YAML dla manifestów Kubernetes, wykresów Helm lub podręczników Ansible.
QA i testowanie
Konwertuj fixtures testowe XML lub konfiguracje JUnit na YAML dla frameworków testowych obsługujących źródła danych YAML, takich jak pytest z fixtures YAML lub Robot Framework.
Inżynieria danych
Przekształcaj eksporty XML z systemów enterprise (SAP, Oracle) na YAML do przyjęcia przez narzędzia ETL, takie jak dbt lub Airflow, korzystające z konfiguracji i schematów opartych na YAML.
Nauka i dokumentacja
Studenci i pisarze techniczni mogą wklejać próbki XML, aby zobaczyć, jak elementy, atrybuty i zagnieżdżenia przekładają się na wcięcia, sekwencje i odwzorowania YAML.

Tabela odwzorowania XML na YAML

XML i YAML mają różne modele danych. Poniższa tabela pokazuje, jak każda konstrukcja XML mapuje się na odpowiednik YAML. Atrybuty są zazwyczaj konwertowane na klucze z prefiksem podkreślenia, a powtarzające się elementy stają się sekwencjami YAML. Niektóre konstrukcje, takie jak komentarze i instrukcje przetwarzania, nie mają reprezentacji w YAML i są odrzucane podczas konwersji.

Konstrukcja XMLPrzykład XMLOdpowiednik 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: różnice modeli danych

Konwersja między XML a YAML to nie tylko zamiana składni. Formaty te mają fundamentalne różnice strukturalne wpływające na sposób reprezentowania danych po konwersji.

System typów
XML przechowuje wszystkie wartości jako łańcuchy tekstowe. YAML ma natywne wartości logiczne, liczby całkowite, liczby zmiennoprzecinkowe i wartości null. Podczas konwersji wartość taka jak "true" lub "3306" może zostać zinterpretowana jako wartość logiczna lub liczba całkowita YAML, chyba że konwerter ją zacytuje. Zawsze weryfikuj wartości wrażliwe na typ w wyjściu.
Atrybuty a klucze
Elementy XML mogą zawierać atrybuty obok elementów potomnych i treści tekstowej. YAML posiada wyłącznie odwzorowania klucz-wartość. Atrybuty muszą być konwertowane na zwykłe klucze, zazwyczaj z prefiksem _ lub @, aby odróżnić je od elementów potomnych.
Kolejność i duplikaty
XML zachowuje kolejność dokumentu i dopuszcza elementy rodzeństwa o tej samej nazwie tagu. Odwzorowania YAML są nieuprawione kolejnościowo zgodnie ze specyfikacją (choć większość parserów zachowuje kolejność wstawiania), a duplikaty kluczy są zabronione w YAML 1.2. Powtarzające się elementy XML muszą stać się sekwencją YAML.

Przykłady kodu

Poniżej znajdują się działające przykłady konwersji XML na YAML w JavaScript, Python, Go i wierszu poleceń. Każdy przykład obsługuje zagnieżdżone elementy, atrybuty i powtarzające się tagi rodzeństwa.

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
}

Często zadawane pytania

Czy konwersja XML na YAML jest bezstratna?
Nie w pełni. Atrybuty XML, komentarze, instrukcje przetwarzania i sekcje CDATA nie mają natywnego odpowiednika w YAML. Atrybuty można zachować jako klucze z prefiksem (_attr lub @attr), ale komentarze i instrukcje przetwarzania są odrzucane. Jeśli potrzebujesz powrotu do XML, sprawdź, czy atrybuty i deklaracje przestrzeni nazw przetrwały konwersję.
Jak atrybuty XML są reprezentowane w YAML?
Większość konwerterów poprzedza nazwy atrybutów podkreśleniem (_) lub symbolem @, aby odróżnić je od kluczy elementów potomnych. Na przykład <server port="8080"> staje się server:\n _port: "8080". Konkretny prefiks zależy od używanej biblioteki lub narzędzia.
Co dzieje się z powtarzającymi się elementami XML podczas konwersji?
Gdy ten sam tag elementu pojawia się kilka razy pod jednym elementem nadrzędnym, konwerter grupuje je w sekwencję YAML (listę). Na przykład dwa elementy rodzeństwa <item> stają się item:\n - value1\n - value2. Pojedynczy element <item> pozostaje jako wartość skalarna, chyba że włączony jest tryb wymuszania tablic.
Czy mogę z powrotem przekonwertować YAML na XML?
Tak, lecz wynik zależy od sposobu, w jaki pierwotna konwersja obsługiwała atrybuty i typy. Jeśli atrybuty zostały zachowane z kluczami z prefiksem, konwerter YAML na XML może je odtworzyć. ToolDeck posiada narzędzie YAML na XML do operacji odwrotnej. Pamiętaj, że natywne typy YAML (wartości logiczne, liczby) staną się łańcuchami tekstowymi w XML.
Dlaczego wyjście YAML cytuje niektóre wartości?
YAML ma typy natywne: true/false to wartości logiczne, gołe liczby stają się liczbami całkowitymi lub zmiennoprzecinkowymi, a yes/no/on/off to również wartości logiczne w YAML 1.1. Jeśli Twój XML zawiera tekst taki jak "true" lub "3306", który powinien pozostać łańcuchem znaków, konwerter cytuje go, aby zapobiec reinterpretacji wartości przez parsery YAML. To poprawne zachowanie, nie błąd.
Jak obsługiwać duże pliki XML?
Konwertery działające w przeglądarce sprawdzają się dobrze dla plików do kilku megabajtów. W przypadku większych plików (10 MB i więcej) użyj podejścia strumieniowego: parsuj XML za pomocą iterparse Pythona lub sax dla Node.js, buduj pośredni obiekt przyrostowo, a następnie serializuj do YAML. Narzędzia takie jak yq mogą też konwertować XML na YAML bezpośrednio z wiersza poleceń bez ładowania całego dokumentu do pamięci.
Jaka jest różnica między konwersją XML na YAML a konwersją XML na JSON?
Obie konwersje napotykają ten sam problem mapowania atrybutów XML i powtarzających się elementów na inny model danych. Główna różnica leży w formacie wyjściowym. JSON jest rygorystyczny (brak komentarzy, jawne typy, ścisła składnia), natomiast YAML jest nadzbiorem JSON, który dodaje funkcje przyjazne człowiekowi: komentarze, łańcuchy wielowierszowe, kotwice i aliasy. Wybierz JSON, gdy odbiorcą jest API lub środowisko uruchomieniowe JavaScript. Wybierz YAML, gdy odbiorcą jest człowiek edytujący pliki konfiguracyjne.