YAML to XML

Конвертація YAML у формат XML

Спробувати приклад

Введення YAML

Виведення XML

Працює локально · Безпечно вставляти секрети
XML з'явиться тут…
Також спробуйте:YAML to JSON

Що таке конвертація YAML у XML?

Конвертація YAML у XML — це перетворення даних, записаних у форматі YAML (YAML Ain't Markup Language), у формат XML (Extensible Markup Language). YAML використовує відступи та мінімальну пунктуацію для представлення структурованих даних, тоді як XML описує ту саму ієрархію за допомогою відкривальних і закривальних тегів. Конвертація між цими форматами є рутинним завданням, коли системи, що споживають XML, мають отримати дані, спочатку написані у YAML.

YAML розроблено для зручності читання людиною. Конфігураційні файли таких інструментів, як Kubernetes, Ansible, Docker Compose та GitHub Actions, написані у YAML, оскільки він компактний і зручний для редагування вручну. XML, визначений специфікацією W3C XML 1.0, десятиліттями залишається стандартним форматом обміну даними в корпоративних системах, SOAP-вебсервісах та документо-орієнтованих процесах. Коли конфігурацію, написану у YAML, необхідно передати в XML-орієнтований пайплайн, конвертація є обов'язковою.

Відповідність між YAML і XML не є взаємно однозначною. YAML нативно підтримує типи даних: булеві значення, цілі числа, числа з рухомою комою та null, тоді як XML трактує весь вміст як текст, якщо схема (XSD або DTD) не визначає типи зовні. Послідовності YAML (списки) не мають прямого відповідника в XML і мають бути представлені як повторювані елементи. Розуміння цих відмінностей допомагає передбачити результат конвертації та уникнути несподіванок.

Навіщо використовувати цей конвертер YAML у XML?

Ручне переписування YAML у XML є виснажливим і схильним до помилок, особливо для глибоко вкладених структур. Цей конвертер виконує структурне перетворення миттєво.

Миттєва конвертація
Вставте YAML і одразу отримайте відформатований XML. Не потрібно писати скрипт або встановлювати CLI-інструмент для разових конвертацій.
🔒
Обробка з пріоритетом приватності
Вся конвертація виконується у вашому браузері. Ваші YAML-дані, які часто містять адреси серверів, облікові дані та деталі інфраструктури, ніколи не залишають вашу машину.
📋
Без реєстрації
Використовуйте конвертер без реєстрації, входу або надання електронної пошти. Відкрийте сторінку і починайте конвертацію.
🌐
Підтримка вкладених структур
Підтримує глибоко вкладені відображення YAML, послідовності, змішані типи та багаторядкові рядки. Виведення зберігає ієрархію з правильними відступами XML.

Сценарії використання конвертера YAML у XML

Frontend-розробка
Конвертуйте тестові YAML-дані у формат XML для тестування XML-парсерів, XSLT-перетворень або компонентів, що очікують XML-відповіді від API.
Backend-інтеграція
Перетворюйте YAML-конфігурацію у XML при інтеграції з legacy Java-сервісами, що використовують Spring XML config, Maven POM-файли або SOAP-ендпоінти.
DevOps та CI/CD
Конвертуйте маніфести Kubernetes або Ansible YAML у XML для інструментів, що потребують XML-введення, — наприклад, конфігурацій пайплайнів Jenkins або певних систем моніторингу.
QA та тестування
Генеруйте XML-фікстури для тестів із YAML-визначень. YAML зручніший для підтримки як тестових даних, а конвертація у XML на етапі тестування зберігає фікстури зручними для читання.
Інженерія даних
Конвертуйте YAML-форматовані ETL-конфіги або визначення схем у XML для пайплайнів, що споживають XML. Поширено у сфері охорони здоров'я (HL7), фінансів (FpML) та державних інформаційних систем.
Навчання та прототипування
Студенти та початківці можуть вставити YAML і побачити поряд еквівалентну структуру XML, що допомагає сформувати інтуїцію щодо відображення ієрархічних даних між форматами.

Довідник відповідності типів YAML і XML

Типи даних YAML не відображаються безпосередньо у XML. Таблиця нижче показує, як кожна конструкція YAML перетворюється на відповідний XML-еквівалент. Розуміння цих правил допомагає передбачити результат і усунути неочікувані наслідки конвертації.

Тип YAMLПриклад YAMLВиведення 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 проти XML: відмінності форматів

YAML і XML вирішують одну задачу — представлення структурованих даних — із різними компромісами. Жоден із них не є універсально кращим; правильний вибір залежить від того, хто або що споживає дані.

YAML
Розмежування пробілами, без закривальних тегів. Підтримує нативні типи (bool, int, float, null). Коментарі з #. Компактний для конфігурацій і редагування вручну. Парситься бібліотеками PyYAML, js-yaml та gopkg.in/yaml.
XML
Теговий формат із явними парами відкривального/закривального тегів. Усі значення за замовчуванням — текст; типи потребують схеми (XSD). Підтримує атрибути, простори імен, змішаний вміст та інструкції обробки. Парситься стандартною бібліотекою кожної основної мови.
ХарактеристикаYAMLXML
СинтаксисНа основі відступівТеговий (&lt;tag&gt;...&lt;/tag&gt;)
Типи данихНативні (string, int, bool, null, float)Лише текст (типи додає схема)
Коментарі# вбудовані коментарі<!-- блокові коментарі -->
АтрибутиНативна підтримка відсутняТак (&lt;tag attr="val"&gt;)
Простори іменНе підтримуютьсяТак (xmlns:prefix)
Розмір файлуМенший (без закривальних тегів)Більший (багатослівні теги)

Приклади коду

Як конвертувати YAML у XML програмно в різних мовах і середовищах:

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>

Часті запитання

Чи можна представити послідовності YAML в XML?
Так, але XML не має нативного типу списку. Послідовності YAML зазвичай конвертуються у повторювані XML-елементи з однаковим ім'ям тегу. Наприклад, список YAML під ключем "items" стає кількома дочірніми елементами &lt;item&gt;. Деякі конвертери огортають їх у батьківський елемент &lt;items&gt; для зручності.
Що відбувається з коментарями YAML під час конвертації?
Коментарі YAML (рядки, що починаються з #) відкидаються під час конвертації. Більшість YAML-парсерів вилучають коментарі при побудові структури даних, тому вони недоступні для XML-виведення. Якщо вам необхідно зберегти коментарі, потрібен YAML-парсер, що їх зберігає, — наприклад, ruamel.yaml у Python.
Як обробляються якорі та псевдоніми YAML?
Якорі YAML (&name) та псевдоніми (*name) розгортаються перед конвертацією. Парсер підставляє псевдоніми повними значеннями, тому отриманий XML містить повні дані без жодних посилань на якорі. Це означає, що XML-виведення може бути більшим за YAML-введення, якщо якорі використовувалися для уникнення повторень.
Чи є конвертація оберненою (XML назад у YAML)?
Частково. Ви можете конвертувати XML у YAML, але результат може не збігатися з оригінальним YAML. Атрибути XML не мають відповідника у YAML і зазвичай представляються як спеціальні ключі (наприклад, @attribute). Інформація про типи також втрачається, оскільки XML трактує все як текст, тому числа та булеві значення з оригінального YAML стають рядками після зворотного перетворення.
Як обробляти атрибути XML при конвертації з YAML?
У YAML відсутня нативна концепція атрибутів. Поширеною угодою є додавання до ключів префікса @, щоб вказати, що вони мають стати XML-атрибутами, а не дочірніми елементами. Наприклад, "@id: 42" під відображенням дасть &lt;element id="42"&gt;. Цю угоду використовують бібліотеки xml-js та xmltodict.
Який максимальний розмір YAML-файлу підтримує цей інструмент?
Конвертер працює у вашому браузері, тому ліміт залежить від доступної пам'яті вашого пристрою. Файли розміром до кількох мегабайт конвертуються без проблем на сучасному обладнанні. Для дуже великих файлів (50 МБ+) використовуйте командний рядок — наприклад, yq або Python-скрипт із PyYAML та lxml, що ефективніше обробляють потокову передачу та пам'ять.
Чому мій YAML генерує некоректний XML?
Найпоширеніша причина — ключі YAML, що не є допустимими іменами XML-елементів. Імена XML-елементів не можуть починатися з цифри, містити пробіли або більшість спеціальних символів. Ключі на кшталт "2nd-item" або "my key" дадуть некоректний XML. Перейменуйте проблемні ключі або використовуйте конвертер, що автоматично очищує імена (наприклад, замінює пробіли підкресленнями та додає підкреслення перед іменами, що починаються з цифри).