ToolDeck

XML থেকে YAML

XML থেকে YAML ফরম্যাটে রূপান্তর করুন

একটি উদাহরণ চেষ্টা করুন

XML ইনপুট

YAML আউটপুট

স্থানীয়ভাবে চলে · গোপন তথ্য পেস্ট করা নিরাপদ
YAML এখানে দেখাবে…

XML থেকে YAML রূপান্তর কী?

XML থেকে YAML রূপান্তর হলো Extensible Markup Language (XML) থেকে YAML Ain't Markup Language (YAML)-এ ডেটা রূপান্তরের প্রক্রিয়া। XML অ্যাঙ্গেল-ব্র্যাকেট ট্যাগ ও অ্যাট্রিবিউট ব্যবহার করে শ্রেণিবদ্ধ ডেটা বর্ণনা করে, আর YAML একই কাঠামো ইন্ডেন্টেশন ও সাধারণ-টেক্সট কী-মান জোড়ার মাধ্যমে উপস্থাপন করে। XML থেকে YAML-এ অনলাইনে রূপান্তর করা একটি সাধারণ কাজ যখন Java Spring, Maven বা .NET-এর মতো XML-কেন্দ্রিক সিস্টেম থেকে Kubernetes, Ansible, GitHub Actions এবং Docker Compose-এর মতো YAML-পছন্দী প্ল্যাটফর্মে কনফিগারেশন মাইগ্রেট করা হয়।

দুটি ফরম্যাটের ডেটা মডেল আলাদা। XML ডিফল্টভাবে সবকিছু টেক্সট হিসেবে বিবেচনা করে এবং টাইপ নিশ্চিত করতে স্কিমা সংজ্ঞা (XSD, DTD) ব্যবহার করে। YAML-এর নেটিভ টাইপ আছে: স্ট্রিং, পূর্ণসংখ্যা, দশমিক, বুলিয়ান, নাল, সিকোয়েন্স (অ্যারে) এবং ম্যাপিং (অবজেক্ট)। রূপান্তরের সময় "true", "5432" এবং "3.14"-এর মতো মান YAML নেটিভ টাইপ হিসেবে ব্যাখ্যা হতে পারে। একটি সতর্ক কনভার্টার মূল টেক্সট হিসেবে রাখতে এই মানগুলো উদ্ধৃতিচিহ্নে রাখে।

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 রূপান্তরের ব্যবহারের ক্ষেত্র

ফ্রন্টেন্ড ডেভেলপমেন্ট
পুরনো বিল্ড টুল (Ant, Maven) থেকে XML কনফিগারেশন স্নিপেট GitHub Actions বা GitLab CI-এর মতো আধুনিক CI পাইপলাইনের জন্য YAML-এ রূপান্তর করুন যেগুলো YAML কনফিগ ফাইল প্রত্যাশা করে।
ব্যাকেন্ড ইঞ্জিনিয়ারিং
Spring XML বিন সংজ্ঞা Spring Boot-এর application.yml ফরম্যাটে মাইগ্রেট করুন, অথবা কন্টেইনার ডিপ্লয়মেন্টের জন্য .NET app.config সেকশন YAML-এ রূপান্তর করুন।
ডেভঅপস ও অবকাঠামো
XML-ভিত্তিক ডিপ্লয়মেন্ট বর্ণনাকারী (Tomcat server.xml, IIS web.config) Kubernetes ম্যানিফেস্ট, Helm চার্ট বা Ansible প্লেবুকের জন্য YAML সমতুল্যে রূপান্তর করুন।
QA ও পরীক্ষা
XML টেস্ট ফিক্সচার বা JUnit কনফিগারেশন YAML ডেটা সোর্স সমর্থন করে এমন টেস্ট ফ্রেমওয়ার্কের জন্য YAML-এ রূপান্তর করুন, যেমন pytest YAML ফিক্সচার সহ বা Robot Framework।
ডেটা ইঞ্জিনিয়ারিং
এন্টারপ্রাইজ সিস্টেম (SAP, Oracle) থেকে XML ডেটা এক্সপোর্ট dbt বা Airflow-এর মতো ETL টুলের জন্য YAML-এ রূপান্তর করুন যেগুলো 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-এর নেটিভ বুলিয়ান, পূর্ণসংখ্যা, দশমিক এবং নাল আছে। রূপান্তরের সময় "true" বা "3306"-এর মতো মান YAML বুলিয়ান বা পূর্ণসংখ্যা হিসেবে পুনরায় ব্যাখ্যা হতে পারে যদি কনভার্টার সেটি উদ্ধৃতিচিহ্নে না রাখে। আউটপুটে টাইপ-সংবেদনশীল মান সবসময় যাচাই করুন।
অ্যাট্রিবিউট বনাম কী
XML এলিমেন্টে চাইল্ড এলিমেন্ট ও টেক্সট কন্টেন্টের পাশাপাশি অ্যাট্রিবিউট থাকতে পারে। YAML-এ শুধুমাত্র কী-মান ম্যাপিং আছে। অ্যাট্রিবিউটগুলো নিয়মিত কীতে রূপান্তরিত হতে হয়, সাধারণত _ বা @ উপসর্গ দিয়ে চাইল্ড এলিমেন্ট থেকে আলাদা করা হয়।
ক্রম ও পুনরাবৃত্তি
XML ডকুমেন্টের ক্রম সংরক্ষণ করে এবং একই ট্যাগ নামের sibling এলিমেন্ট অনুমতি দেয়। YAML ম্যাপিং স্পেক অনুযায়ী ক্রমহীন (যদিও বেশিরভাগ পার্সার সন্নিবেশ ক্রম রাখে) এবং YAML 1.2-এ ডুপ্লিকেট কী নিষিদ্ধ। বারবার আসা XML এলিমেন্ট অবশ্যই YAML সিকোয়েন্স হতে হবে।

কোড উদাহরণ

নিচে JavaScript, Python, Go এবং কমান্ড লাইনে XML থেকে YAML রূপান্তরের কার্যকরী উদাহরণ দেওয়া হলো। প্রতিটি উদাহরণ নেস্টেড এলিমেন্ট, অ্যাট্রিবিউট এবং পুনরাবৃত্ত sibling এলিমেন্ট পরিচালনা করে।

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-এ ফিরে যাওয়ার প্রয়োজন হলে যাচাই করুন যে অ্যাট্রিবিউট ও নেমস্পেস ডিক্লারেশন রূপান্তর টিকে গেছে।
YAML-এ XML অ্যাট্রিবিউট কীভাবে উপস্থাপিত হয়?
বেশিরভাগ কনভার্টার অ্যাট্রিবিউটের নামে আন্ডারস্কোর (_) বা @ চিহ্ন উপসর্গ দেয় চাইল্ড এলিমেন্ট কী থেকে আলাদা করতে। উদাহরণস্বরূপ, <server port="8080"> হয়ে যায় server:\n _port: "8080"। নির্দিষ্ট উপসর্গ আপনি যে লাইব্রেরি বা টুল ব্যবহার করেন তার উপর নির্ভর করে।
রূপান্তরের সময় পুনরাবৃত্ত XML এলিমেন্টের কী হয়?
একই এলিমেন্ট ট্যাগ একটি প্যারেন্টের অধীনে একাধিকবার দেখা গেলে, কনভার্টার সেগুলো YAML সিকোয়েন্স (তালিকা)-এ গ্রুপ করে। উদাহরণস্বরূপ, দুটি <item> sibling হয়ে যায় item:\n - value1\n - value2। একটি একক <item> স্কেলার মান হিসেবে থাকে যদি না ফোর্স-অ্যারে মোড চালু থাকে।
আমি কি YAML থেকে XML-এ ফিরে রূপান্তর করতে পারি?
হ্যাঁ, কিন্তু ফলাফল মূল রূপান্তর অ্যাট্রিবিউট ও টাইপ কীভাবে পরিচালনা করেছে তার উপর নির্ভর করে। উপসর্গযুক্ত কী দিয়ে অ্যাট্রিবিউট সংরক্ষিত থাকলে, YAML-থেকে-XML কনভার্টার সেগুলো পুনর্নির্মাণ করতে পারে। বিপরীত রূপান্তরের জন্য ToolDeck-এর YAML থেকে XML টুল রয়েছে। মনে রাখবেন YAML নেটিভ টাইপ (বুলিয়ান, সংখ্যা) XML-এ টেক্সট স্ট্রিং হয়ে যাবে।
YAML আউটপুটে কিছু মান কেন উদ্ধৃতিচিহ্নে থাকে?
YAML-এর নেটিভ টাইপ আছে: true/false বুলিয়ান, খালি সংখ্যা পূর্ণসংখ্যা বা দশমিক হয়, এবং yes/no/on/off-ও YAML 1.1-এ বুলিয়ান। আপনার XML-এ যদি "true" বা "3306"-এর মতো টেক্সট থাকে যা স্ট্রিং থাকা উচিত, কনভার্টার YAML পার্সারকে মান পুনরায় ব্যাখ্যা করা থেকে বিরত রাখতে সেটি উদ্ধৃতিচিহ্নে রাখে। এটি সঠিক আচরণ, ত্রুটি নয়।
বড় XML ফাইল কীভাবে পরিচালনা করব?
ব্রাউজার-ভিত্তিক কনভার্টার কয়েক মেগাবাইট পর্যন্ত ফাইলের জন্য ভালো কাজ করে। বড় ফাইলের জন্য (১০ MB+), স্ট্রিমিং পদ্ধতি ব্যবহার করুন: Python-এর iterparse বা Node.js-এর sax দিয়ে XML পার্স করুন, ধীরে ধীরে মধ্যবর্তী অবজেক্ট তৈরি করুন, তারপর YAML-এ সিরিয়ালাইজ করুন। yq টুল সম্পূর্ণ ডকুমেন্ট মেমোরিতে না নিয়েই কমান্ড লাইন থেকে সরাসরি XML থেকে YAML রূপান্তর করতে পারে।
XML থেকে YAML এবং XML থেকে JSON রূপান্তরের মধ্যে পার্থক্য কী?
উভয় রূপান্তরেই XML অ্যাট্রিবিউট ও পুনরাবৃত্ত এলিমেন্ট ভিন্ন ডেটা মডেলে ম্যাপ করার একই চ্যালেঞ্জ আছে। মূল পার্থক্য হলো আউটপুট ফরম্যাটে। JSON কঠোর (কোনো কমেন্ট নেই, স্পষ্ট টাইপ, কঠোর সিনট্যাক্স), আর YAML হলো JSON-এর একটি সুপারসেট যা মানব-বান্ধব বৈশিষ্ট্য যোগ করে: কমেন্ট, মাল্টি-লাইন স্ট্রিং, অ্যাঙ্কর এবং অ্যালিয়াস। কনজিউমার যদি API বা JavaScript রানটাইম হয় তবে JSON বেছে নিন। কনফিগ ফাইল যদি মানুষ সরাসরি এডিট করে তবে YAML বেছে নিন।