ToolDeck

XML'den YAML'a

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

Örnek dene

XML Girdisi

YAML Çıktısı

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir
YAML burada görüntülenecektir…

XML'den YAML'a Dönüşüm Nedir?

XML'den YAML'a dönüşüm, verilerin Genişletilebilir İşaretleme Dili (XML) biçiminden YAML Ain't Markup Language (YAML) biçimine dönüştürülmesi işlemidir. XML, hiyerarşik verileri öznitelikli açılı ayraç etiketleriyle tanımlarken YAML aynı yapıları girinti ve düz metin anahtar-değer çiftleriyle temsil eder. XML'yi çevrimiçi olarak YAML'a dönüştürmek, Java Spring, Maven veya .NET gibi XML ağırlıklı sistemlerden Kubernetes, Ansible, GitHub Actions ve Docker Compose gibi YAML tercih eden platformlara yapılandırma taşırken sık başvurulan bir adımdır.

İki biçim veri modelleri bakımından farklılık gösterir. XML varsayılan olarak her şeyi metin olarak ele alır ve tür zorunluluğu için şema tanımlarına (XSD, DTD) dayanır. YAML ise yerel türlere sahiptir: dizeler, tam sayılar, kayan noktalılar, mantıksal değerler, null'lar, diziler ve eşlemeler. Dönüşüm sırasında "true", "5432" ve "3.14" gibi değerler, XML kaynağındaki özgün metin temsili korunmak yerine YAML yerel türleri olarak yorumlanabilir. Dikkatli bir dönüştürücü bu değerleri tırnak içine alarak özgün metni korur.

XML'in YAML'da karşılığı bulunmayan yapıları da vardır: öznitelikler, ad alanları, işleme talimatları, CDATA bölümleri ve yorumlar. Dönüşüm, öznitelikleri temsil etmek için bir kural seçmeli (genellikle _attr gibi alt çizgi önekli anahtarlar) ve diğerlerini atmayı ya da düzleştirmeyi kararlaştırmalıdır. Bu değiş tokuşları dönüşümden önce anlamak, doğru aracı seçmenize, yapılandırmanıza ve YAML çıktısının özgün XML amacıyla örtüşüp örtüşmediğini doğrulamanıza yardımcı olur.

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

Neden Çevrimiçi XML'den YAML'a Dönüştürücü Kullanmalısınız?

Elle dönüşüm betiği yazmak, öznitelik eşlemesi, tekrarlayan öğelerde dizi algılama ve YAML tür dönüşümü uç durumlarıyla uğraşmak anlamına gelir. Tarayıcı tabanlı bir dönüştürücü tüm bunları tek adımda halleder; YAML çıktısını inceleyip doğrudan yapılandırma dosyalarınıza kopyalayabilirsiniz.

Anında Dönüşüm
XML'inizi yapıştırın ve milisaniyeler içinde YAML çıktısını alın. Kütüphane kurulumu, derleme adımı veya bakım gerektiren bir betik yoktur.
🔒
Gizlilik Öncelikli İşleme
Dönüşüm, JavaScript kullanılarak tamamen tarayıcınızda çalışır. XML verileriniz makinenizi terk etmez ve herhangi bir sunucuya gönderilmez.
🔀
Öznitelik ve Dizi Desteği
XML öznitelikleri, önekli anahtarlarla eşlenir. Tekrarlayan kardeş öğeler, liste yapıları korunarak otomatik olarak YAML dizilerine gruplandırılır.
📋
Hesap Gerekmez
Sayfayı açın, XML'inizi yapıştırın ve YAML sonucunu kopyalayın. Kayıt formu yok, API anahtarı yok, hız sınırı veya kullanım kotası yok.

XML'den YAML'a Dönüşüm Kullanım Senaryoları

Frontend Geliştirme
Ant ve Maven gibi eski derleme araçlarından gelen XML yapılandırma parçacıklarını, YAML yapılandırma dosyası bekleyen GitHub Actions veya GitLab CI gibi modern CI süreçleri için YAML'a dönüştürün.
Backend Mühendisliği
Spring XML bean tanımlarını Spring Boot'un application.yml biçimine taşıyın ya da .NET app.config bölümlerini konteyner dağıtımlarında kullanmak üzere YAML'a dönüştürün.
DevOps ve Altyapı
XML tabanlı dağıtım tanımlayıcılarını (Tomcat server.xml, IIS web.config) Kubernetes manifestleri, Helm chart'ları veya Ansible playbook'ları için YAML eşdeğerlerine dönüştürün.
QA ve Test
XML test fikstürlerini veya JUnit yapılandırmasını, YAML veri kaynağı destekleyen test çerçeveleri için YAML'a dönüştürün; örneğin YAML fikstürlü pytest veya Robot Framework.
Veri Mühendisliği
Kurumsal sistemlerden (SAP, Oracle) gelen XML veri dışa aktarmalarını, YAML tabanlı yapılandırma ve şema kullanan dbt veya Airflow gibi ETL araçlarının alabilmesi için YAML'a dönüştürün.
Öğrenme ve Dokümantasyon
Öğrenciler ve teknik yazarlar, XML örneklerini yapıştırarak öğelerin, özniteliklerin ve iç içe geçmenin YAML girintisine, dizilerine ve eşlemelerine nasıl çevrildiğini görebilir.

XML'den YAML'a Eşleme Başvurusu

XML ve YAML farklı veri modellerine sahiptir. Aşağıdaki tablo, her XML yapısının YAML karşılığına nasıl eşlendiğini gösterir. Öznitelikler genellikle alt çizgi önekli anahtarlara dönüştürülür, tekrarlayan öğeler ise YAML dizisi haline gelir. Yorumlar ve işleme talimatları gibi bazı yapıların YAML karşılığı yoktur ve dönüşüm sırasında atılır.

XML YapısıXML ÖrneğiYAML Karşılığı
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 ile YAML: Veri Modeli Farklılıkları

XML ile YAML arasında dönüşüm yapmak, basit bir sözdizimi değişikliği değildir. Bu biçimler, dönüşümden sonra verilerin nasıl temsil edileceğini etkileyen temel yapısal farklılıklara sahiptir.

Tür Sistemi
XML tüm değerleri metin dizesi olarak saklar. YAML ise yerel mantıksal değerlere, tam sayılara, kayan noktalılara ve null'lara sahiptir. Dönüşüm sırasında "true" veya "3306" gibi bir değer, dönüştürücü onu tırnak içine almadıkça YAML mantıksal değeri veya tam sayısı olarak yeniden yorumlanabilir. Çıktıdaki türe duyarlı değerleri her zaman doğrulayın.
Öznitelikler ve Anahtarlar
XML öğeleri, alt öğelerin ve metin içeriğinin yanı sıra öznitelik de taşıyabilir. YAML'da yalnızca anahtar-değer eşlemeleri vardır. Özniteliklerin, alt öğelerden ayırt etmek amacıyla genellikle _ veya @ gibi bir önek içeren sıradan anahtarlara dönüştürülmesi gerekir.
Sıra ve Tekrarlar
XML belge sırasını korur ve aynı etiket adına sahip kardeş öğelere izin verir. YAML eşlemeleri spec'e göre sırasızdır (çoğu ayrıştırıcı ekleme sırasını korusa da) ve YAML 1.2'de yinelenen anahtarlar yasaktır. Tekrarlayan XML öğeleri, bir YAML dizisi haline gelmelidir.

Kod Örnekleri

Aşağıda JavaScript, Python, Go ve komut satırında XML'den YAML'a dönüşüm için çalışan örnekler bulunmaktadır. Her örnek iç içe öğeleri, öznitelikleri ve tekrarlayan kardeş etiketleri işlemektedir.

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
}

Sıkça Sorulan Sorular

XML'den YAML'a dönüşüm kayıpsız mı?
Tam olarak değil. XML özniteliklerinin, yorumların, işleme talimatlarının ve CDATA bölümlerinin yerel YAML karşılığı yoktur. Öznitelikler önek içeren anahtarlarla (_attr veya @attr) korunabilir; ancak yorumlar ve işleme talimatları atılır. XML'e geri dönmeniz gerekiyorsa özniteliklerin ve ad alanı bildirimlerinin dönüşümden sağ çıkıp çıkmadığını doğrulayın.
XML öznitelikleri YAML'da nasıl temsil edilir?
Çoğu dönüştürücü, öznitelik adlarına alt çizgi (_) veya @ sembolü öneki ekleyerek bunları alt öğe anahtarlarından ayırır. Örneğin <server port="8080">, server:\n _port: "8080" haline gelir. Kullanılan önek, kütüphaneye veya araca göre değişir.
Dönüşüm sırasında tekrarlayan XML öğelerine ne olur?
Aynı öğe etiketi bir üst öğe altında birden fazla kez görünüyorsa dönüştürücü bunları bir YAML dizisinde gruplar. Örneğin iki <item> kardeşi item:\n - value1\n - value2 haline gelir. Tek bir <item>, force-array modu etkin olmadıkça skaler değer olarak kalır.
YAML'ı tekrar XML'e dönüştürebilir miyim?
Evet, ancak sonuç özgün dönüşümde özniteliklerin ve türlerin nasıl işlendiğine bağlıdır. Öznitelikler önek içeren anahtarlarla korunmuşsa YAML'dan XML'e dönüştürücü bunları yeniden oluşturabilir. ToolDeck, ters yön için bir YAML'dan XML'e aracına sahiptir. YAML yerel türlerinin (mantıksal değerler, sayılar) XML'de metin dizeleri haline geleceğini unutmayın.
YAML çıktısı neden bazı değerleri tırnak içine alır?
YAML yerel türlere sahiptir: true/false mantıksal değerdir, başka karakter içermeyen sayılar tam sayı veya kayan noktalı olur, YAML 1.1'de yes/no/on/off da mantıksal değer sayılır. XML'iniz dize olarak kalması gereken "true" veya "3306" gibi metin içeriyorsa dönüştürücü, YAML ayrıştırıcılarının değeri yanlış yorumlamasını önlemek için tırnak işareti ekler. Bu bir hata değil, doğru davranıştır.
Büyük XML dosyalarını nasıl işlerim?
Tarayıcı tabanlı dönüştürücüler birkaç megabayta kadar dosyalarda iyi çalışır. Daha büyük dosyalar (10 MB ve üzeri) için akış tabanlı bir yaklaşım kullanın: Python'ın iterparse veya Node.js sax ile XML'i ayrıştırın, ara nesneyi artımlı olarak oluşturun, ardından YAML'a serileştirin. yq aracı da tüm belgeyi belleğe yüklemeden XML'i doğrudan komut satırından YAML'a dönüştürebilir.
XML'den YAML'a dönüşüm ile XML'den JSON'a dönüşüm arasındaki fark nedir?
Her iki dönüşüm de XML özniteliklerini ve tekrarlayan öğeleri farklı bir veri modeline eşleme konusunda aynı zorlukla karşılaşır. Temel fark çıktı biçimindedir. JSON katıdır (yorum yok, açık türler, sıkı sözdizimi); YAML ise JSON'ın bir üst kümesidir ve insan dostu özellikler ekler: yorumlar, çok satırlı dizeler, bağlantı noktaları (anchor) ve takma adlar. Tüketici bir API veya JavaScript çalışma zamanıysa JSON'ı tercih edin; tüketici yapılandırma dosyalarını düzenleyen bir insansa YAML'ı tercih edin.