XML to YAML

Konversi XML ke format YAML

Coba contoh

Input XML

Output YAML

Berjalan lokal · Aman untuk menempel rahasia
YAML akan muncul di sini…

Apa itu Konversi XML ke YAML?

Konversi XML ke YAML adalah proses mengubah data dari Extensible Markup Language (XML) menjadi YAML Ain't Markup Language (YAML). XML menggunakan tag tanda kurung sudut dengan atribut untuk mendeskripsikan data hierarkis, sedangkan YAML merepresentasikan struktur yang sama melalui indentasi dan pasangan key-value berupa teks biasa. Mengonversi XML ke YAML secara online adalah tugas yang umum saat bermigrasi konfigurasi dari sistem berbasis XML seperti Java Spring, Maven, atau .NET ke platform yang lebih menyukai YAML, seperti Kubernetes, Ansible, GitHub Actions, dan Docker Compose.

Kedua format ini berbeda dalam model datanya. XML memperlakukan semua nilai sebagai teks secara default dan mengandalkan definisi skema (XSD, DTD) untuk penegakan tipe. YAML memiliki tipe asli: string, integer, float, boolean, null, sekuens (larik), dan pemetaan (objek). Selama konversi, nilai seperti "true", "5432", dan "3.14" dapat diinterpretasikan sebagai tipe asli YAML alih-alih tetap sebagai string. Konverter yang cermat akan mengutip nilai-nilai ini untuk mempertahankan representasi teks asli dari sumber XML.

XML juga mendukung konstruksi yang tidak memiliki padanan YAML: atribut, namespace, instruksi pemrosesan, bagian CDATA, dan komentar. Konversi harus memilih konvensi untuk merepresentasikan atribut (umumnya kunci berawalan garis bawah seperti _attr) dan memutuskan apakah akan membuang atau meratakan elemen lainnya. Memahami pertimbangan ini sebelum mengonversi membantu Anda memilih alat yang tepat, mengonfigurasinya dengan benar, dan memverifikasi bahwa output YAML sesuai dengan maksud XML asli.

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

Mengapa Menggunakan Konverter XML ke YAML Online?

Menulis skrip konversi secara manual berarti menangani pemetaan atribut, deteksi larik untuk elemen berulang, dan kasus tepi koersi tipe YAML. Konverter berbasis browser menangani semua itu dalam satu langkah, memungkinkan Anda memeriksa output YAML dan langsung menyalinnya ke dalam file konfigurasi.

Konversi instan
Tempel XML Anda dan dapatkan output YAML dalam hitungan milidetik. Tidak perlu menginstal pustaka, tidak ada langkah build, tidak ada skrip yang perlu dikelola.
🔒
Pemrosesan mengutamakan privasi
Konversi berjalan sepenuhnya di browser Anda menggunakan JavaScript. Data XML Anda tetap berada di perangkat Anda dan tidak pernah dikirim ke server.
🔀
Menangani atribut dan larik
Atribut XML dipetakan ke kunci berawalan. Elemen saudara yang berulang dikelompokkan ke dalam sekuens YAML secara otomatis, mempertahankan struktur daftar.
📋
Tidak perlu akun
Buka halaman, tempel XML, salin hasil YAML. Tidak ada pendaftaran, tidak ada API key, tidak ada batas penggunaan.

Kasus Penggunaan XML ke YAML

Pengembangan frontend
Konversi cuplikan konfigurasi XML dari alat build lama (Ant, Maven) ke YAML untuk pipeline CI modern seperti GitHub Actions atau GitLab CI yang mengharapkan file konfigurasi YAML.
Rekayasa backend
Migrasi definisi bean XML Spring ke format application.yml Spring Boot, atau konversi bagian app.config .NET ke YAML untuk deployment container.
DevOps dan infrastruktur
Ubah deskriptor deployment berbasis XML (Tomcat server.xml, IIS web.config) menjadi padanan YAML untuk manifest Kubernetes, Helm chart, atau Ansible playbook.
QA dan pengujian
Konversi fixture pengujian XML atau konfigurasi JUnit ke YAML untuk framework pengujian yang mendukung sumber data YAML, seperti pytest dengan fixture YAML atau Robot Framework.
Rekayasa data
Ubah ekspor data XML dari sistem enterprise (SAP, Oracle) ke YAML untuk dikonsumsi oleh alat ETL seperti dbt atau Airflow yang menggunakan konfigurasi dan skema berbasis YAML.
Pembelajaran dan dokumentasi
Mahasiswa dan penulis teknis dapat menempel contoh XML untuk melihat bagaimana elemen, atribut, dan nesting diterjemahkan ke indentasi, sekuens, dan pemetaan YAML.

Referensi Pemetaan XML ke YAML

XML dan YAML memiliki model data yang berbeda. Tabel di bawah menunjukkan bagaimana setiap konstruksi XML dipetakan ke padanan YAML-nya. Atribut umumnya dikonversi ke kunci berawalan garis bawah, dan elemen berulang menjadi sekuens YAML. Beberapa konstruksi seperti komentar dan instruksi pemrosesan tidak memiliki representasi YAML dan dibuang selama konversi.

Konstruksi XMLContoh XMLPadanan 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: Perbedaan Model Data

Mengonversi antara XML dan YAML bukan sekadar penggantian sintaks. Kedua format ini memiliki perbedaan struktural mendasar yang memengaruhi cara data direpresentasikan setelah konversi.

Sistem tipe
XML menyimpan semua nilai sebagai string teks. YAML memiliki boolean, integer, float, dan null asli. Selama konversi, nilai seperti "true" atau "3306" mungkin diinterpretasikan ulang sebagai boolean atau integer YAML kecuali konverter mengutipnya. Selalu verifikasi nilai yang sensitif terhadap tipe dalam output.
Atribut vs kunci
Elemen XML dapat membawa atribut bersamaan dengan elemen anak dan konten teks. YAML hanya memiliki pemetaan key-value. Atribut harus dikonversi ke kunci biasa, biasanya dengan prefiks seperti _ atau @ untuk membedakannya dari elemen anak.
Urutan dan duplikat
XML mempertahankan urutan dokumen dan memungkinkan elemen saudara dengan nama tag yang sama. Pemetaan YAML tidak berurutan menurut spesifikasi (meskipun sebagian besar parser mempertahankan urutan penyisipan), dan kunci duplikat dilarang dalam YAML 1.2. Elemen XML yang berulang harus menjadi sekuens YAML.

Contoh Kode

Berikut adalah contoh yang dapat digunakan untuk mengonversi XML ke YAML dalam JavaScript, Python, Go, dan baris perintah. Setiap contoh menangani elemen bersarang, atribut, dan tag saudara yang berulang.

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
}

Pertanyaan yang Sering Diajukan

Apakah konversi XML ke YAML bersifat lossless?
Tidak sepenuhnya. Atribut XML, komentar, instruksi pemrosesan, dan bagian CDATA tidak memiliki padanan YAML asli. Atribut dapat dipertahankan sebagai kunci berawalan (_attr atau @attr), tetapi komentar dan instruksi pemrosesan dibuang. Jika Anda perlu melakukan round-trip kembali ke XML, verifikasi bahwa atribut dan deklarasi namespace berhasil melewati konversi.
Bagaimana atribut XML direpresentasikan dalam YAML?
Sebagian besar konverter memberi prefiks nama atribut dengan garis bawah (_) atau simbol @ untuk memisahkannya dari kunci elemen anak. Misalnya, <server port="8080"> menjadi server:\n _port: "8080". Prefiks spesifik bergantung pada pustaka atau alat yang Anda gunakan.
Apa yang terjadi pada elemen XML yang berulang selama konversi?
Ketika tag elemen yang sama muncul beberapa kali di bawah satu induk, konverter mengelompokkannya ke dalam sekuens YAML (daftar). Misalnya, dua saudara <item> menjadi item:\n - value1\n - value2. Satu <item> tetap sebagai nilai skalar kecuali mode force-array diaktifkan.
Bisakah saya mengonversi YAML kembali ke XML?
Ya, tetapi hasilnya bergantung pada cara konversi asli menangani atribut dan tipe. Jika atribut dipertahankan dengan kunci berawalan, konverter YAML ke XML dapat merekonstruksinya. ToolDeck memiliki alat YAML ke XML untuk arah sebaliknya. Perlu diketahui bahwa tipe asli YAML (boolean, angka) akan menjadi string teks dalam XML.
Mengapa output YAML mengutip beberapa nilai?
YAML memiliki tipe asli: true/false adalah boolean, angka tanpa kutipan menjadi integer atau float, dan yes/no/on/off juga merupakan boolean dalam YAML 1.1. Jika XML Anda mengandung teks seperti "true" atau "3306" yang seharusnya tetap berupa string, konverter akan mengutipnya untuk mencegah parser YAML menginterpretasikan ulang nilai tersebut. Ini adalah perilaku yang benar, bukan kesalahan.
Bagaimana cara menangani file XML berukuran besar?
Konverter berbasis browser bekerja baik untuk file hingga beberapa megabyte. Untuk file yang lebih besar (10MB ke atas), gunakan pendekatan streaming: urai XML dengan iterparse Python atau sax Node.js, bangun objek perantara secara bertahap, lalu serialisasi ke YAML. Alat seperti yq juga dapat mengonversi XML ke YAML langsung dari baris perintah tanpa memuat seluruh dokumen ke dalam memori.
Apa perbedaan antara konversi XML ke YAML dan XML ke JSON?
Kedua konversi menghadapi tantangan yang sama dalam memetakan atribut XML dan elemen berulang ke model data yang berbeda. Perbedaan utamanya ada pada format output. JSON bersifat ketat (tanpa komentar, tipe eksplisit, sintaks ketat), sedangkan YAML adalah superset JSON yang menambahkan fitur ramah manusia: komentar, string multi-baris, anchor, dan alias. Pilih JSON ketika konsumennya adalah API atau runtime JavaScript. Pilih YAML ketika konsumennya adalah manusia yang mengedit file konfigurasi.