YAML to XML
YAML को XML फॉर्मेट में कनवर्ट करें
YAML इनपुट
XML आउटपुट
YAML से XML रूपांतरण क्या है?
YAML से XML रूपांतरण, YAML (YAML Ain't Markup Language) में लिखे डेटा को XML (Extensible Markup Language) में परिवर्तित करता है। YAML संरचित डेटा को दर्शाने के लिए इंडेंटेशन और न्यूनतम विराम चिह्नों का उपयोग करता है, जबकि XML एक स्पष्ट पदानुक्रम के साथ प्रारंभिक और समापन टैगों का उपयोग करता है। दोनों के बीच रूपांतरण एक सामान्य कार्य है जब XML उपभोग करने वाली प्रणालियों को मूलतः YAML में लिखा डेटा प्राप्त करना होता है।
YAML को इंसानों के लिए आसानी से पढ़ने योग्य बनाया गया था। Kubernetes, Ansible, Docker Compose और GitHub Actions जैसे उपकरणों की कॉन्फ़िगरेशन फ़ाइलें YAML में लिखी जाती हैं क्योंकि यह संक्षिप्त और हाथ से संपादित करने में सरल है। W3C XML 1.0 विनिर्देश द्वारा परिभाषित XML, दशकों से एंटरप्राइज़ प्रणालियों, SOAP वेब सेवाओं और दस्तावेज़-केंद्रित कार्यप्रवाहों में डिफ़ॉल्ट डेटा आदान-प्रदान फ़ॉर्मेट रहा है। जब YAML में लिखी कॉन्फ़िगरेशन को किसी XML-आधारित पाइपलाइन में डालना हो, तो रूपांतरण आवश्यक हो जाता है।
YAML और XML के बीच मैपिंग एक-से-एक नहीं है। YAML मूल रूप से boolean, integer, float और null जैसे डेटा प्रकारों को समझता है, जबकि XML सभी सामग्री को पाठ के रूप में मानता है जब तक कि कोई स्कीमा (XSD या DTD) बाहरी रूप से प्रकार परिभाषित न करे। YAML अनुक्रमों (सूचियों) का XML में कोई प्रत्यक्ष समतुल्य नहीं है और उन्हें दोहराए गए एलिमेंट के रूप में दर्शाना पड़ता है। इन अंतरों को समझने से आउटपुट का अनुमान लगाने और अप्रत्याशित परिणामों से बचने में मदद मिलती है।
इस YAML से XML कनवर्टर का उपयोग क्यों करें?
YAML को manually XML में लिखना थकाऊ और error-prone है, खासकर deeply nested structures के लिए। यह कनवर्टर structural conversion तुरंत handle करता है।
YAML से XML के उपयोग के मामले
YAML से XML प्रकार मैपिंग संदर्भ
YAML डेटा प्रकार XML पर सीधे मैप नहीं होते। यह तालिका दर्शाती है कि प्रत्येक YAML संरचना अपने XML समतुल्य में कैसे रूपांतरित होती है। इन नियमों को समझने से आउटपुट का अनुमान लगाने और अप्रत्याशित परिणामों का निवारण करने में मदद मिलती है।
| YAML प्रकार | YAML उदाहरण | XML आउटपुट |
|---|---|---|
| Mapping (key: value) | { name: Alice } | <name>Alice</name> |
| Sequence (- item) | - apple\n- banana | <item>apple</item><item>banana</item> |
| Nested mapping | user:\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> |
| Null | value: null | <value/> |
| Multiline string | bio: |\n Line one\n Line two | <bio>Line one\nLine two</bio> |
YAML बनाम XML: फ़ॉर्मेट के अंतर
YAML और XML एक ही समस्या — संरचित डेटा प्रतिनिधित्व — को अलग-अलग समझौतों के साथ हल करते हैं। कोई भी सार्वभौमिक रूप से बेहतर नहीं है; सही चुनाव इस पर निर्भर करता है कि डेटा कौन या क्या उपभोग करता है।
| विशेषता | YAML | XML |
|---|---|---|
| सिंटैक्स | इंडेंटेशन-आधारित | टैग-आधारित (<tag>...</tag>) |
| डेटा प्रकार | मूल (स्ट्रिंग, पूर्णांक, बूलियन, शून्य, दशमलव) | केवल पाठ (स्कीमा प्रकार जोड़ता है) |
| टिप्पणियाँ | # इनलाइन टिप्पणियाँ | <!-- ब्लॉक टिप्पणियाँ --> |
| विशेषताएं | कोई मूल समर्थन नहीं | हाँ (<tag attr="val">) |
| नेमस्पेस | समर्थित नहीं | हाँ (xmlns:prefix) |
| फ़ाइल आकार | छोटा (कोई समापन टैग नहीं) | बड़ा (विस्तृत टैग) |
कोड उदाहरण
विभिन्न भाषाओं और परिवेशों में YAML को प्रोग्रामेटिक रूप से XML में कनवर्ट करने का तरीका:
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>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>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>
}# 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>