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-розробка
Мігруйте визначення XML-бінів Spring у формат application.yml для Spring Boot або конвертуйте секції app.config у .NET у 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 беззбитковою?
Не повністю. Атрибути, коментарі, інструкції обробки та секції CDATA в XML не мають власного відповідника в 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, коли споживачем є людина, що редагує файли конфігурації.