CSV से XML रूपांतरण क्या है?
CSV से XML रूपांतरण, comma-separated values को Extensible Markup Language (XML) दस्तावेज़ों में बदलता है। CSV की प्रत्येक पंक्ति एक XML तत्व बनती है, और प्रत्येक कॉलम हेडर एक child element tag name से संबद्ध होता है। परिणाम एक श्रेणीबद्ध, स्व-वर्णनात्मक दस्तावेज़ होता है जिसे प्रणालियाँ किसी स्कीमा (XSD या DTD) के विरुद्ध सत्यापित कर सकती हैं और XSLT, XPath, तथा SAX/DOM पार्सर जैसे मानक XML उपकरणों से संसाधित कर सकती हैं।
XML, W3C द्वारा 1998 में XML 1.0 विनिर्देश प्रकाशित होने के बाद से डेटा आदान-प्रदान का एक मानक रहा है। हालाँकि JSON ने कई web API में XML का स्थान ले लिया है, फिर भी XML, SOAP वेब सेवाओं, RSS/Atom फ़ीड, SVG ग्राफ़िक्स, Office Open XML दस्तावेज़ों (.docx, .xlsx), Android संसाधन फ़ाइलों, Maven/Gradle बिल्ड कॉन्फ़िगरेशन, तथा स्वास्थ्य सेवा (HL7 CDA), वित्त (FpML, XBRL), और सरकारी क्षेत्र (NIEM) जैसे विनियमित उद्योगों में आवश्यक फ़ॉर्मैट बना हुआ है। जब स्रोत डेटा किसी स्प्रेडशीट या डेटाबेस निर्यात के रूप में हो, तो CSV-से-XML रूपांतरण उसे इन प्रणालियों में लाने का तरीका है।
एक सही CSV से XML कनवर्टर को RFC 4180 के विशेष मामलों को संभालना होता है: अल्पविराम या नई लाइन वाले उद्धृत फ़ील्ड, escaped double quotes, और भिन्न सीमांकक। XML पक्ष पर, इसे पाँच पूर्वनिर्धारित XML entities (& < > " ') को escape करना होता है, हेडर से valid element names बनाने होते हैं (रिक्त स्थान और विशेष वर्णों को बदलकर), और उचित XML घोषणा और सुसंगत encoding के साथ well-formed आउटपुट उत्पन्न करना होता है।
CSV से XML कनवर्टर का उपयोग क्यों करें?
स्प्रेडशीट डेटा से हाथ से XML लिखना धीमा और error-prone है। एक closing tag भूलना या ampersand को escape न करना invalid XML बनाता है जो अगले पार्सर को विफल कर देता है। यह कनवर्टर पार्सिंग, escaping, और तत्व निर्माण को एक ही चरण में संभालता है।
CSV से XML के उपयोग के मामले
CSV से XML मैपिंग संदर्भ
CSV फ़ाइल का प्रत्येक भाग XML संरचना में किस प्रकार मैप होता है, यह समझना आपको आउटपुट फ़ॉर्मैट का अनुमान लगाने और रूपांतरण से पहले अपने डेटा को समायोजित करने में सहायता करता है।
| CSV अवधारणा | XML समकक्ष | विवरण |
|---|---|---|
| CSV file | XML document | The entire file maps to a root element containing all records |
| Header row | Element tag names | Each column header becomes the tag name for child elements |
| Data row | <row> element | Each row becomes a repeating child element of the root |
| Cell value | Text node | Cell content becomes the text inside the corresponding tag |
| Empty cell | Empty element or omitted | Can be rendered as <field/> or excluded from output |
| Comma delimiter | XML structure | Delimiters are replaced by element nesting and closing tags |
CSV बनाम XML
CSV एक सपाट, सीमांकक-आधारित फ़ॉर्मैट है जिसमें कोई अंतर्निहित स्कीमा या डेटा प्रकार नहीं होते। XML एक श्रेणीबद्ध, स्व-वर्णनात्मक markup language है जो स्कीमा, नेमस्पेस और जटिल नेस्टिंग का समर्थन करती है। इनमें से किसे चुनना है यह आपकी अगली प्रणाली की आवश्यकताओं पर निर्भर करता है।
कोड उदाहरण
नीचे विभिन्न भाषाओं में CSV से XML रूपांतरण के कार्यशील उदाहरण दिए गए हैं। प्रत्येक उदाहरण CSV हेडर पंक्ति को element tag names के रूप में पार्स करता है, प्रत्येक डेटा पंक्ति को एक container element में लपेटता है, और cell सामग्री में XML entities को escape करता है।
// CSV string → XML with proper escaping
const csv = `name,age,city
Alice,30,Berlin
Bob,25,Tokyo`
function csvToXml(csv, rootTag = 'data', rowTag = 'row') {
const rows = csv.trim().split('\n').map(r => r.split(','))
const [headers, ...data] = rows
const xmlRows = data.map(row => {
const fields = headers.map((h, i) => {
const val = (row[i] || '').replace(/&/g, '&')
.replace(/</g, '<').replace(/>/g, '>')
return ` <${h}>${val}</${h}>`
}).join('\n')
return ` <${rowTag}>\n${fields}\n </${rowTag}>`
}).join('\n')
return `<?xml version="1.0" encoding="UTF-8"?>\n<${rootTag}>\n${xmlRows}\n</${rootTag}>`
}
console.log(csvToXml(csv))
// → <?xml version="1.0" encoding="UTF-8"?>
// → <data><row><name>Alice</name><age>30</age>...</row>...</data>import csv, io
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString
csv_string = """name,age,city
Alice,30,Berlin
Bob,25,Tokyo"""
reader = csv.DictReader(io.StringIO(csv_string))
root = Element('data')
for row in reader:
row_el = SubElement(root, 'row')
for key, value in row.items():
child = SubElement(row_el, key)
child.text = value
# Pretty-print with declaration
raw = tostring(root, encoding='unicode')
pretty = parseString(raw).toprettyxml(indent=' ')
print(pretty)
# → <?xml version="1.0" ?>
# → <data>
# → <row>
# → <name>Alice</name>
# → <age>30</age>
# → <city>Berlin</city>
# → </row>
# → ...
# → </data>package main
import (
"encoding/csv"
"encoding/xml"
"fmt"
"os"
"strings"
)
type Field struct {
XMLName xml.Name
Value string `xml:",chardata"`
}
type Row struct {
XMLName xml.Name `xml:"row"`
Fields []Field
}
type Data struct {
XMLName xml.Name `xml:"data"`
Rows []Row
}
func main() {
input := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
r := csv.NewReader(strings.NewReader(input))
records, _ := r.ReadAll()
headers := records[0]
var data Data
for _, rec := range records[1:] {
row := Row{}
for i, h := range headers {
row.Fields = append(row.Fields, Field{
XMLName: xml.Name{Local: h},
Value: rec[i],
})
}
data.Rows = append(data.Rows, row)
}
out, _ := xml.MarshalIndent(data, "", " ")
fmt.Println(xml.Header + string(out))
// → <?xml version="1.0" encoding="UTF-8"?>
// → <data><row><name>Alice</name>...</row>...</data>
}# Using Python's csv and xml modules via one-liner
python3 -c "
import csv, sys
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString
reader = csv.DictReader(sys.stdin)
root = Element('data')
for row in reader:
r = SubElement(root, 'row')
for k, v in row.items():
SubElement(r, k).text = v
print(parseString(tostring(root, encoding='unicode')).toprettyxml(indent=' '))
" < data.csv
# Using Miller (mlr) — a dedicated CSV/JSON/XML tool
mlr --icsv --oxml cat data.csv