YAML na XML

Konwertuj YAML do formatu XML

Wypróbuj przykład

Wejście YAML

Wyjście XML

Działa lokalnie · Bezpieczne do wklejania sekretów
XML pojawi się tutaj…
Wypróbuj też:YAML do JSON

Czym jest konwersja YAML na XML?

Konwersja YAML na XML to przekształcanie danych zapisanych w formacie YAML (YAML Ain't Markup Language) do formatu XML (Extensible Markup Language). YAML używa wcięć i minimalnej interpunkcji do reprezentowania danych strukturalnych, natomiast XML stosuje tagi otwierające i zamykające z jawną hierarchią. Konwersja między tymi formatami to rutynowe zadanie, gdy systemy korzystające z XML muszą odbierać dane pierwotnie napisane w YAML.

YAML został zaprojektowany z myślą o czytelności dla człowieka. Pliki konfiguracyjne narzędzi takich jak Kubernetes, Ansible, Docker Compose i GitHub Actions są pisane w YAML, ponieważ jest on zwarty i łatwy do ręcznej edycji. XML, zdefiniowany przez specyfikację W3C XML 1.0, przez dekady był domyślnym formatem wymiany danych w systemach korporacyjnych, usługach sieciowych SOAP i procesach pracy zorientowanych na dokumenty. Gdy konfiguracja napisana w YAML musi zasilić potok oparty na XML, wymagana jest konwersja.

Odwzorowanie między YAML a XML nie jest wzajemnie jednoznaczne. YAML natywnie obsługuje typy danych takie jak wartości logiczne, liczby całkowite, liczby zmiennoprzecinkowe i wartość null, podczas gdy XML traktuje całą zawartość jako tekst, chyba że schemat (XSD lub DTD) definiuje typy zewnętrznie. Sekwencje YAML (listy) nie mają bezpośredniego odpowiednika w XML i muszą być reprezentowane jako powtarzające się elementy. Znajomość tych różnic pomaga przewidzieć wynik i uniknąć niespodzianek.

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

Ręczne przepisywanie YAML jako XML jest żmudne i podatne na błędy, zwłaszcza w przypadku głęboko zagnieżdżonych struktur. Ten konwerter obsługuje tłumaczenie strukturalne natychmiastowo.

Natychmiastowa konwersja
Wklej YAML i otrzymaj sformatowane wyjście XML od razu. Nie ma potrzeby pisania skryptu ani instalowania narzędzia wiersza poleceń do jednorazowych konwersji.
🔒
Przetwarzanie z priorytetem prywatności
Cała konwersja odbywa się w przeglądarce. Dane YAML — często zawierające adresy serwerów, dane uwierzytelniające i szczegóły infrastruktury — nigdy nie opuszczają Twojego urządzenia.
📋
Bez konta
Używaj konwertera bez rejestracji, logowania ani podawania adresu e-mail. Otwórz stronę i zacznij konwertować.
🌐
Obsługa zagnieżdżonych struktur
Obsługuje głęboko zagnieżdżone odwzorowania YAML, sekwencje, typy mieszane i łańcuchy wielowierszowe. Wyjście zachowuje hierarchię z właściwym wcięciem XML.

Zastosowania konwertera YAML na XML

Programowanie frontendowe
Konwertuj przykładowe dane YAML do formatu XML w celu testowania parserów XML, transformacji XSLT lub komponentów oczekujących odpowiedzi XML z API.
Integracja backendowa
Przekształcaj konfigurację YAML do XML przy integracji ze starszymi serwisami Java używającymi Spring XML config, plikami Maven POM lub punktami końcowymi SOAP.
DevOps i CI/CD
Konwertuj manifesty Kubernetes lub Ansible YAML do XML dla narzędzi wymagających wejścia XML, takich jak konfiguracje potoków Jenkins lub określone systemy monitorowania.
QA i testowanie
Generuj fixtures testowe XML z definicji YAML. YAML jest łatwiejszy w utrzymaniu jako dane testowe, a konwersja do XML w czasie testowania sprawia, że fixtures pozostają czytelne.
Inżynieria danych
Konwertuj konfiguracje ETL w formacie YAML lub definicje schematów do XML dla potoków przetwarzających XML. Typowe zastosowanie w ochronie zdrowia (HL7), finansach (FpML) i rządowych systemach danych.
Nauka i prototypowanie
Studenci i osoby stawiające pierwsze kroki mogą wklejać YAML i obserwować równoważną strukturę XML obok siebie, co pomaga budować intuicję dotyczącą mapowania danych hierarchicznych między formatami.

Tabela odwzorowania typów YAML na XML

Typy danych YAML nie mapują się bezpośrednio na XML. Ta tabela pokazuje, jak każda konstrukcja YAML przekłada się na odpowiednik XML. Znajomość tych zasad pomaga przewidzieć wynik i rozwiązywać problemy z nieoczekiwanymi rezultatami.

Typ YAMLPrzykład YAMLWyjście 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: różnice między formatami

YAML i XML rozwiązują ten sam problem — reprezentację danych strukturalnych — z różnymi kompromisami. Żaden z nich nie jest uniwersalnie lepszy; właściwy wybór zależy od tego, kto lub co przetwarza dane.

YAML
Ograniczony białymi znakami, bez tagów zamykających. Obsługuje typy natywne (bool, int, float, null). Komentarze z #. Zwarty do konfiguracji i ręcznej edycji. Parsowany przez biblioteki takie jak PyYAML, js-yaml i gopkg.in/yaml.
XML
Oparty na tagach z jawnymi parami otwierającymi i zamykającymi. Wszystkie wartości domyślnie są tekstem; typy wymagają schematu (XSD). Obsługuje atrybuty, przestrzenie nazw, zawartość mieszaną i instrukcje przetwarzania. Parsowany przez standardową bibliotekę każdego głównego języka programowania.
CechaYAMLXML
SkładniaOparta na wcięciachOparta na tagach (&lt;tag&gt;...&lt;/tag&gt;)
Typy danychNatywne (string, int, bool, null, float)Tylko tekst (schemat dodaje typy)
Komentarze# komentarze inline<!-- komentarze blokowe -->
AtrybutyBrak natywnego wsparciaTak (&lt;tag attr="val"&gt;)
Przestrzenie nazwNieobsługiwaneTak (xmlns:prefix)
Rozmiar plikuMniejszy (bez tagów zamykających)Większy (tagi szczegółowe)

Przykłady kodu

Jak programowo konwertować YAML na XML w różnych językach i środowiskach:

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>

Często zadawane pytania

Czy sekwencje YAML można reprezentować w XML?
Tak, ale XML nie ma natywnego typu listy. Sekwencje YAML są zazwyczaj konwertowane na powtarzające się elementy XML o tej samej nazwie tagu. Na przykład lista YAML pod kluczem "items" staje się wieloma elementami potomnymi &lt;item&gt;. Niektóre konwertery owijają je w element nadrzędny &lt;items&gt; dla przejrzystości.
Co dzieje się z komentarzami YAML podczas konwersji?
Komentarze YAML (wiersze zaczynające się od #) są odrzucane podczas konwersji. Większość parserów YAML usuwa komentarze podczas budowania struktury danych, więc nie są one dostępne dla wyjścia XML. Jeśli chcesz zachować komentarze, potrzebujesz parsera YAML, który je przechowuje, takiego jak ruamel.yaml w Pythonie.
Jak obsługiwane są kotwice i aliasy YAML?
Kotwice YAML (&name) i aliasy (*name) są rozwijane przed konwersją. Parser rozszerza aliasy do ich pełnych wartości, więc wynikowy XML zawiera kompletne dane bez żadnych odwołań do kotwic. Oznacza to, że wyjście XML może być większe niż wejście YAML, jeśli kotwice były używane do unikania powtórzeń.
Czy konwersja jest odwracalna (XML z powrotem do YAML)?
Częściowo. Możesz konwertować XML na YAML, ale wynik może nie odpowiadać dokładnie oryginalnemu YAML. Atrybuty XML nie mają odpowiednika w YAML i są zazwyczaj reprezentowane jako specjalne klucze (np. @attribute). Informacje o typach są też tracone, ponieważ XML traktuje wszystko jako tekst — liczby i wartości logiczne w oryginalnym YAML stają się łańcuchami znaków po konwersji tam i z powrotem.
Jak obsługiwać atrybuty XML podczas konwersji z YAML?
YAML nie ma natywnej koncepcji atrybutów. Powszechną konwencją jest poprzedzanie kluczy znakiem @, aby wskazać, że powinny stać się atrybutami XML zamiast elementami potomnymi. Na przykład "@id: 42" pod odwzorowaniem wyprodukuje &lt;element id="42"&gt;. Ta konwencja jest stosowana przez biblioteki takie jak xml-js i xmltodict.
Jaki jest maksymalny rozmiar pliku YAML, który to narzędzie obsługuje?
Konwerter działa w przeglądarce, więc limit zależy od dostępnej pamięci urządzenia. Pliki do kilku megabajtów konwertują się bez problemów na współczesnym sprzęcie. W przypadku bardzo dużych plików (50 MB i więcej) użyj narzędzia wiersza poleceń takiego jak yq lub skryptu Python z PyYAML i lxml, które obsługują strumieniowanie i pamięć wydajniej.
Dlaczego mój YAML produkuje nieprawidłowe wyjście XML?
Najczęstszą przyczyną są klucze YAML, które nie są prawidłowymi nazwami elementów XML. Nazwy elementów XML nie mogą zaczynać się od cyfry, zawierać spacji ani większości znaków specjalnych. Klucze takie jak "2nd-item" lub "my key" spowodują nieprawidłowy XML. Zmień nazwy problemowych kluczy lub użyj konwertera, który automatycznie oczyszcza nazwy (np. zastępując spacje podkreśleniami i dodając podkreślenie przed nazwami zaczynającymi się od cyfry).