XML to YAML

Преобразует XML в формат YAML

Попробовать пример

Входные данные XML

Выходные данные YAML

Работает локально · Безопасно вставлять секреты
YAML появится здесь…

Что такое преобразование XML в YAML?

Преобразование XML в YAML — это процесс трансформации данных из формата Extensible Markup Language (XML) в YAML Ain't Markup Language (YAML). XML использует теги в угловых скобках с атрибутами для описания иерархических данных, тогда как YAML представляет те же структуры через отступы и пары ключ-значение в виде обычного текста. Преобразование XML в YAML онлайн — распространённая задача при переходе конфигурации с XML-ориентированных систем — Java Spring, Maven, .NET — на платформы, предпочитающие YAML: Kubernetes, Ansible, GitHub Actions и Docker Compose.

Два формата различаются моделями данных. XML по умолчанию трактует всё как текст и опирается на определения схем (XSD, DTD) для проверки типов. YAML имеет нативные типы: строки, целые числа, числа с плавающей точкой, булевы значения, null, последовательности (массивы) и отображения (объекты). При конвертации значения вроде "true", "5432" и "3.14" могут интерпретироваться как нативные типы YAML вместо того, чтобы оставаться строками. Аккуратный конвертер берёт такие значения в кавычки, чтобы сохранить исходное текстовое представление из XML-источника.

В XML также есть конструкции, не имеющие аналога в YAML: атрибуты, пространства имён, инструкции по обработке, секции CDATA и комментарии. При конвертации необходимо выбрать соглашение для представления атрибутов (как правило, ключи с префиксом-подчёркиванием, например _attr) и решить, что делать с остальным — отбрасывать или преобразовывать. Понимание этих компромиссов до начала конвертации помогает выбрать подходящий инструмент, правильно его настроить и убедиться, что YAML-вывод соответствует исходному смыслу 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

Зачем использовать онлайн-конвертер XML в YAML?

Написание скрипта конвертации вручную означает необходимость разбираться с сопоставлением атрибутов, обнаружением массивов у повторяющихся элементов и граничными случаями приведения типов YAML. Браузерный конвертер справляется со всем этим за один шаг — вы получаете YAML-результат и можете сразу скопировать его в конфигурационные файлы.

Мгновенное преобразование
Вставьте XML и сразу получите YAML. Не нужно устанавливать библиотеку, настраивать сборку или писать вспомогательный скрипт.
🔒
Обработка без передачи данных
Всё преобразование выполняется в браузере средствами JavaScript. Ваши XML-данные никогда не покидают компьютер и не отправляются ни на какой сервер.
🔀
Поддержка атрибутов и массивов
Атрибуты XML сопоставляются с ключами с префиксом. Повторяющиеся соседние элементы автоматически группируются в YAML-последовательности — списковые структуры сохраняются.
📋
Без аккаунта
Откройте страницу, вставьте XML и скопируйте YAML-результат. Никакой регистрации, API-ключей или лимитов использования.

Сценарии использования конвертера XML в YAML

Frontend-разработка
Преобразуйте фрагменты XML-конфигурации из устаревших инструментов сборки (Ant, Maven) в YAML для современных CI-конвейеров — GitHub Actions или GitLab CI, которые ожидают конфигурацию в формате YAML.
Backend-разработка
Перенесите определения Spring XML-бинов в формат application.yml для Spring Boot или преобразуйте секции .NET app.config в YAML для контейнерных развёртываний.
DevOps и инфраструктура
Переведите XML-дескрипторы развёртывания (Tomcat server.xml, IIS web.config) в YAML-эквиваленты для манифестов Kubernetes, Helm-чартов или Ansible-плейбуков.
QA и тестирование
Преобразуйте XML-фикстуры для тестов или конфигурацию JUnit в YAML для тестовых фреймворков, поддерживающих YAML-источники данных, — например, pytest с YAML-фикстурами или Robot Framework.
Инженерия данных
Трансформируйте XML-экспорты из корпоративных систем (SAP, Oracle) в YAML для приёма инструментами ETL — dbt или Airflow, использующими YAML-конфигурацию и схемы.
Обучение и документация
Студенты и технические писатели могут вставлять XML-примеры, чтобы наглядно увидеть, как элементы, атрибуты и вложенность отображаются в YAML-отступы, последовательности и отображения.

Справочник по сопоставлению XML и YAML

XML и YAML имеют разные модели данных. В таблице ниже показано, как каждая конструкция XML сопоставляется с эквивалентом в YAML. Атрибуты, как правило, преобразуются в ключи с префиксом-подчёркиванием, а повторяющиеся элементы становятся YAML-последовательностями. Некоторые конструкции — комментарии и инструкции по обработке — не имеют представления в YAML и отбрасываются при конвертации.

Конструкция XMLПример XMLЭквивалент в 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 и YAML: различия моделей данных

Преобразование между XML и YAML — это не просто смена синтаксиса. Форматы имеют принципиальные структурные различия, которые влияют на представление данных после конвертации.

Система типов
XML хранит все значения как текстовые строки. YAML имеет нативные булевы значения, целые числа, числа с плавающей точкой и null. При конвертации значение вроде "true" или "3306" может быть переинтерпретировано как булев тип или целое число YAML, если конвертер не возьмёт его в кавычки. Всегда проверяйте значения, чувствительные к типу, в выводе.
Атрибуты и ключи
Элементы XML могут содержать атрибуты наряду с дочерними элементами и текстовым содержимым. В YAML есть только отображения ключ-значение. Атрибуты необходимо преобразовывать в обычные ключи — как правило, с префиксом _ или @, чтобы отличать их от дочерних элементов.
Порядок и дублирование
XML сохраняет порядок документа и допускает соседние элементы с одинаковым именем тега. Отображения YAML неупорядочены по спецификации (хотя большинство парсеров сохраняет порядок вставки), а дублирующиеся ключи запрещены в YAML 1.2. Повторяющиеся XML-элементы должны быть преобразованы в YAML-последовательность.

Примеры кода

Ниже приведены рабочие примеры преобразования XML в YAML на JavaScript, Python, Go и в командной строке. Каждый пример обрабатывает вложенные элементы, атрибуты и повторяющиеся соседние теги.

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
}

Часто задаваемые вопросы

Является ли преобразование XML в YAML обратимым?
Не полностью. Атрибуты XML, комментарии, инструкции по обработке и секции CDATA не имеют нативного аналога в YAML. Атрибуты можно сохранить в виде ключей с префиксом (_attr или @attr), но комментарии и инструкции по обработке отбрасываются. Если нужно выполнить обратное преобразование в XML, убедитесь, что атрибуты и объявления пространств имён пережили конвертацию.
Как атрибуты XML представляются в YAML?
Большинство конвертеров добавляет к именам атрибутов префикс _ или @, чтобы отделить их от ключей дочерних элементов. Например, <server port="8080"> становится server:\n _port: "8080". Конкретный префикс зависит от используемой библиотеки или инструмента.
Что происходит с повторяющимися XML-элементами при конвертации?
Когда один и тот же тег элемента встречается несколько раз под одним родителем, конвертер группирует их в YAML-последовательность (список). Например, два соседних элемента <item> становятся item:\n - value1\n - value2. Одиночный <item> остаётся скалярным значением, если только не включён режим принудительного создания массивов.
Можно ли преобразовать YAML обратно в XML?
Да, но результат зависит от того, как исходная конвертация обработала атрибуты и типы. Если атрибуты были сохранены с ключами-префиксами, конвертер YAML в XML сможет их восстановить. В ToolDeck есть инструмент YAML to XML для обратного преобразования. Учтите, что нативные типы YAML (булевы значения, числа) станут текстовыми строками в XML.
Почему в YAML-выводе некоторые значения взяты в кавычки?
YAML имеет нативные типы: true/false являются булевыми значениями, «голые» числа становятся целыми или числами с плавающей точкой, а yes/no/on/off также являются булевыми в YAML 1.1. Если XML содержит текст вроде "true" или "3306", который должен оставаться строкой, конвертер берёт его в кавычки, чтобы YAML-парсеры не переинтерпретировали значение. Это правильное поведение, а не ошибка.
Как работать с большими XML-файлами?
Браузерные конвертеры хорошо справляются с файлами размером до нескольких мегабайт. Для более крупных файлов (от 10 МБ) используйте потоковый подход: разбирайте XML с помощью iterparse из Python или sax в Node.js, постепенно формируйте промежуточный объект и затем сериализуйте в YAML. Инструмент yq также умеет преобразовывать XML в YAML прямо из командной строки без загрузки всего документа в память.
В чём разница между преобразованием XML в YAML и XML в JSON?
Оба преобразования сталкиваются с одной и той же проблемой — сопоставлением атрибутов XML и повторяющихся элементов с другой моделью данных. Главное различие — в формате вывода. JSON строг (нет комментариев, явные типы, жёсткий синтаксис), тогда как YAML является надмножеством JSON с удобными для человека возможностями: комментариями, многострочными строками, якорями и псевдонимами. Выбирайте JSON, когда потребителем является API или JavaScript-среда. Выбирайте YAML, когда потребителем является человек, редактирующий конфигурационные файлы.