XML to YAML
XML को YAML फॉर्मेट में कनवर्ट करें
XML इनपुट
YAML आउटपुट
XML से YAML रूपांतरण क्या है?
XML से YAML रूपांतरण डेटा को Extensible Markup Language (XML) से YAML Ain't Markup Language (YAML) में परिवर्तित करता है। XML कोण-कोष्ठक टैगों और विशेषताओं का उपयोग करके पदानुक्रमिक डेटा का वर्णन करता है, जबकि YAML समान संरचनाओं को इंडेंटेशन और सादे पाठ के key-value pairs के माध्यम से दर्शाता है। XML को YAML में ऑनलाइन बदलना एक सामान्य कार्य है जब XML-प्रधान प्रणालियों जैसे Java Spring, Maven, या .NET से उन प्लेटफ़ॉर्म की ओर माइग्रेशन हो जो YAML पसंद करते हैं, जैसे Kubernetes, Ansible, GitHub Actions और Docker Compose।
दोनों फ़ॉर्मेट के डेटा मॉडल अलग हैं। XML डिफ़ॉल्ट रूप से सब कुछ पाठ के रूप में संग्रहीत करता है और प्रकार लागू करने के लिए स्कीमा परिभाषाओं (XSD, DTD) पर निर्भर करता है। YAML में मूल प्रकार होते हैं: स्ट्रिंग, पूर्णांक, दशमलव, बूलियन, शून्य, अनुक्रम (ऐरे) और मैपिंग (ऑब्जेक्ट)। रूपांतरण के दौरान "true", "5432" और "3.14" जैसे मान YAML के मूल प्रकारों के रूप में parse हो सकते हैं। एक सावधान कनवर्टर इन मानों को उद्धृत करता है ताकि XML स्रोत का मूल पाठ प्रतिनिधित्व सुरक्षित रहे।
XML में ऐसी संरचनाएं भी हैं जिनका YAML में कोई समतुल्य नहीं है: विशेषताएं, नेमस्पेस, प्रोसेसिंग निर्देश, CDATA अनुभाग और टिप्पणियाँ। रूपांतरण को विशेषताओं को दर्शाने के लिए एक परंपरा चुननी होती है (सामान्यतः अंडरस्कोर-उपसर्ग वाली कुंजियाँ जैसे _attr) और शेष को त्यागने या समतल करने का निर्णय लेना होता है। रूपांतरण से पहले इन बातों को समझने से आप सही उपकरण चुन सकते हैं, उसे सही तरीके से कॉन्फ़िगर कर सकते हैं, और सत्यापित कर सकते हैं कि YAML आउटपुट मूल XML के उद्देश्य से मेल खाता है।
<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>server:
host: db.example.com
port: "5432"
credentials:
_admin: "true"
username: deploy
password: s3cret
options:
option:
- ssl=true
- timeout=30ऑनलाइन XML से YAML कनवर्टर क्यों उपयोग करें?
हाथ से रूपांतरण स्क्रिप्ट लिखने में विशेषता मैपिंग, बार-बार आने वाले एलिमेंट के लिए ऐरे पहचान और YAML type coercion की edge cases से जूझना पड़ता है। ब्राउज़र-आधारित कनवर्टर यह सब एक चरण में संभालता है और आप 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) |
| Namespaces | xmlns:ns="uri" | Prefix preserved or stripped |
| Boolean-like text | <flag>true</flag> | flag: "true" (quoted to stay string) |
XML बनाम YAML: डेटा मॉडल के अंतर
XML और YAML के बीच रूपांतरण केवल एक सिंटैक्स परिवर्तन नहीं है। इन फ़ॉर्मेट में मूलभूत संरचनात्मक अंतर हैं जो रूपांतरण के बाद डेटा के प्रतिनिधित्व को प्रभावित करते हैं।
कोड उदाहरण
नीचे JavaScript, Python, Go और कमांड लाइन में XML को YAML में बदलने के कार्यशील उदाहरण दिए गए हैं। प्रत्येक उदाहरण नेस्टेड एलिमेंट, विशेषताएं और बार-बार आने वाले sibling tags संभालता है।
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
// → - loggingimport 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))# 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
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
}