ToolDeck

YAML'dan XML'e

YAML'ı XML biçimine dönüştür

Örnek dene

YAML Girdisi

XML Çıktısı

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir
XML burada görüntülenecektir…
Bunu da deneyin:YAML'dan JSON'a

YAML'dan XML'e Dönüşüm Nedir?

YAML'dan XML'e dönüşüm, YAML (YAML Ain't Markup Language) biçiminde yazılmış verileri XML (Extensible Markup Language) biçimine dönüştürür. YAML, yapılandırılmış verileri girintileme ve minimal noktalama ile temsil ederken XML, açık bir hiyerarşiyle açılış ve kapanış etiketleri kullanır. İki biçim arasında dönüşüm yapmak, XML tüketen sistemlerin özünde YAML ile yazılmış verileri alması gerektiğinde sık karşılaşılan bir görevdir.

YAML insan tarafından okunabilirlik için tasarlanmıştır. Kubernetes, Ansible, Docker Compose ve GitHub Actions gibi araçların yapılandırma dosyaları; kompakt yapısı ve elle düzenleme kolaylığı nedeniyle YAML ile yazılır. W3C XML 1.0 spesifikasyonuyla tanımlanan XML ise onlarca yıldır kurumsal sistemlerde, SOAP web servislerinde ve belge odaklı iş akışlarında standart veri alışverişi biçimi olmuştur. YAML ile yazılmış bir yapılandırmanın XML tabanlı bir ardışık düzene (pipeline) beslenmesi gerektiğinde dönüşüm kaçınılmazdır.

YAML ile XML arasındaki eşleme birebir değildir. YAML; boolean, tam sayı, ondalıklı sayı ve null gibi veri türlerini yerel olarak desteklerken XML, bir şema (XSD veya DTD) harici olarak tür tanımlamadıkça tüm içeriği metin olarak ele alır. YAML dizilerinin (listelerin) XML'de doğrudan karşılığı yoktur; bunlar yinelenen öğeler olarak temsil edilmek zorundadır. Bu farkları bilmek, çıktıyı öngörmenizi ve sürprizlerden kaçınmanızı sağlar.

Neden Bu YAML'dan XML'e Dönüştürücüyü Kullanmalısınız?

YAML'ı elle XML olarak yeniden yazmak, özellikle derin iç içe geçmiş yapılarda, sıkıcı ve hataya açıktır. Bu dönüştürücü yapısal çeviriyi anında gerçekleştirir.

Anında Dönüşüm
YAML'ınızı yapıştırın ve biçimlendirilmiş XML çıktısını hemen alın. Tek seferlik dönüşümler için bir betik yazmaya ya da bir CLI aracı kurmaya gerek yoktur.
🔒
Gizlilik Öncelikli İşleme
Tüm dönüşüm tarayıcınızda çalışır. Sunucu adresleri, kimlik bilgileri ve altyapı detaylarını içeren YAML verileriniz makinenizi hiçbir zaman terk etmez.
📋
Hesap Gerekmez
Dönüştürücüyü kayıt olmadan, giriş yapmadan veya e-posta vermeden kullanın. Sayfayı açın ve dönüştürmeye başlayın.
🌐
İç İçe Yapıları Destekler
Derin iç içe geçmiş YAML eşlemelerini, dizileri, karma türleri ve çok satırlı dizeleri destekler. Çıktı, hiyerarşiyi uygun XML girintisiyle korur.

YAML'dan XML'e Kullanım Senaryoları

Frontend Geliştirme
YAML sahte verilerini, XML ayrıştırıcılarını, XSLT dönüşümlerini veya API'lerden XML yanıtı bekleyen bileşenleri test etmek amacıyla XML biçimine dönüştürün.
Backend Entegrasyonu
Spring XML yapılandırması, Maven POM dosyaları veya SOAP uç noktaları kullanan eski Java servisleriyle entegrasyon sırasında YAML yapılandırmasını XML'e dönüştürün.
DevOps ve CI/CD
Jenkins ardışık düzen yapılandırmaları veya belirli izleme sistemleri gibi XML girişi gerektiren araçlar için Kubernetes ya da Ansible YAML bildirimlerini XML'e dönüştürün.
QA ve Test
YAML tanımlarından XML test verileri oluşturun. YAML'ı test verisi olarak sürdürmek daha kolaydır; test sırasında XML'e dönüştürmek ise verileri okunabilir tutar.
Veri Mühendisliği
XML tüketen ardışık düzenler için YAML biçimli ETL yapılandırmalarını veya şema tanımlarını XML'e dönüştürün. Sağlık (HL7), finans (FpML) ve kamu veri sistemlerinde yaygın bir ihtiyaçtır.
Öğrenme ve Prototipleme
Öğrenciler ve yeni başlayanlar YAML yapıştırıp eşdeğer XML yapısını yan yana görerek hiyerarşik verilerin biçimler arasında nasıl eşlendiğine dair sezgi geliştirebilir.

YAML'dan XML'e Tür Eşleme Başvurusu

YAML veri türleri XML'e doğrudan eşlenmez. Bu tablo, her YAML yapısının XML karşılığına nasıl çevrildiğini gösterir. Bu kuralları anlamak, çıktıyı öngörmenize ve beklenmeyen sonuçları gidermenize yardımcı olur.

YAML TürüYAML ÖrneğiXML Çıktısı
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 ile XML: Biçim Farklılıkları

YAML ve XML aynı sorunu — yapılandırılmış veri temsili — farklı değiş tokuşlarla çözer. Hiçbiri her durumda daha iyi değildir; doğru seçim, verinin kim ya da ne tarafından tüketildiğine bağlıdır.

YAML
Boşluk sınırlıdır, kapanış etiketi yoktur. Yerel türleri destekler (bool, int, float, null). # ile yorum satırları eklenir. Yapılandırma ve insan editörü için kompakttır. PyYAML, js-yaml ve gopkg.in/yaml gibi kütüphanelerle ayrıştırılır.
XML
Açık/kapalı etiket çiftlerine dayalıdır. Tüm değerler varsayılan olarak metindir; türler için şema (XSD) gerekir. Öznitelikleri, ad alanlarını, karma içeriği ve işleme talimatlarını destekler. Her büyük programlama dilinin standart kütüphanesiyle ayrıştırılır.
ÖzellikYAMLXML
SözdizimiGirinti tabanlıEtiket tabanlı (&lt;etiket&gt;...&lt;/etiket&gt;)
Veri türleriYerel (string, int, bool, null, float)Yalnızca metin (şema türleri ekler)
Yorumlar# satır içi yorumlar<!-- blok yorumlar -->
ÖzniteliklerYerel destek yokVar (&lt;etiket öznitelik="değer"&gt;)
Ad alanlarıDesteklenmiyorVar (xmlns:önek)
Dosya boyutuKüçük (kapanış etiketi yok)Büyük (ayrıntılı etiketler)

Kod Örnekleri

Farklı dil ve ortamlarda YAML'ı XML'e programatik olarak dönüştürme:

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>

Sıkça Sorulan Sorular

YAML dizileri XML'de temsil edilebilir mi?
Evet, ancak XML'de yerel bir liste türü yoktur. YAML dizileri genellikle aynı etiket adına sahip yinelenen XML öğelerine dönüştürülür. Örneğin "items" anahtarı altındaki bir YAML listesi, birden fazla &lt;item&gt; alt öğesine dönüşür. Bazı dönüştürücüler bunları açıklık için bir üst &lt;items&gt; öğesinin içine sarar.
YAML yorumlarına dönüşüm sırasında ne olur?
YAML yorumları (# ile başlayan satırlar) dönüşüm sırasında atılır. Çoğu YAML ayrıştırıcısı, veri yapısını oluştururken yorumları siler; dolayısıyla bunlar XML çıktısı için kullanılamaz hale gelir. Yorumları korumak istiyorsanız, Python'daki ruamel.yaml gibi yorumları saklayan bir YAML ayrıştırıcısına ihtiyacınız olur.
YAML çapası ve takma adları nasıl işlenir?
YAML çapaları (&ad) ve takma adlar (*ad) dönüşümden önce çözülür. Ayrıştırıcı takma adları tam değerlerine genişletir; bu nedenle elde edilen XML, çapa referansları olmaksızın eksiksiz veriyi içerir. Çapalar tekrarı önlemek amacıyla kullanılmışsa XML çıktısı YAML girişinden daha büyük olabilir.
Dönüşüm tersine çevrilebilir mi (XML'den YAML'a)?
Kısmen. XML'i YAML'a dönüştürebilirsiniz, ancak sonuç orijinal YAML ile birebir örtüşmeyebilir. XML özniteliklerinin YAML karşılığı yoktur ve genellikle özel anahtarlar olarak (@öznitelik gibi) temsil edilir. YAML'daki sayılar ve boolean değerler XML'den geri dönüş sonrasında dizeye dönüşeceğinden tür bilgisi de kaybolur.
YAML'dan dönüştürürken XML özniteliklerini nasıl ele alırım?
YAML'ın öznitelik kavramı yoktur. Yaygın bir yöntem, alt öğeler yerine XML özniteliği olması gereken anahtarlara @ ön eki eklemektir. Örneğin bir eşleme altındaki "@id: 42" ifadesi &lt;öğe id="42"&gt; üretir. Bu yöntem xml-js ve xmltodict gibi kütüphaneler tarafından kullanılmaktadır.
Bu araç en fazla ne boyutunda YAML dosyası işleyebilir?
Dönüştürücü tarayıcınızda çalıştığından sınır, cihazınızın kullanılabilir belleğine bağlıdır. Modern donanımda birkaç megabayta kadar dosyalar sorunsuz dönüştürülür. Çok büyük dosyalar (50 MB ve üzeri) için yq gibi bir komut satırı aracı ya da PyYAML ve lxml kullanan bir Python betiği kullanın; bunlar akış ve belleği daha verimli yönetir.
YAML'ım neden geçersiz XML çıktısı üretiyor?
En yaygın neden, geçerli XML öğe adı olmayan YAML anahtarlarıdır. XML öğe adları sayıyla başlayamaz, boşluk içeremez veya çoğu özel karakter kullanamaz. "2nd-item" veya "benim anahtarım" gibi anahtarlar geçersiz XML üretir. Sorunlu anahtarları yeniden adlandırın ya da adları otomatik olarak temizleyen bir dönüştürücü kullanın (örneğin boşlukları alt çizgiyle değiştirme ve sayıyla başlayan adların önüne alt çizgi ekleme).