एक्सटेंसिबल मार्कअप लैंग्वेज (XML) HTML की तरह ही एक मार्कअप लैंग्वेज है। यह एक पोर्टेबल है और यह किसी भी SQL डेटाबेस का उपयोग किए बिना छोटी से मध्यम मात्रा में डेटा को संभालने के लिए उपयोगी है।
पायथन के मानक पुस्तकालय में xml पैकेज है। इस पैकेज में ElementTree मॉड्यूल है। यह एक सरल और हल्का XML प्रोसेसर API है।
एक्सएमएल पदानुक्रमित डेटा प्रारूप की तरह एक पेड़ है। इस मॉड्यूल में 'एलिमेंटट्री' पूरे एक्सएमएल दस्तावेज़ को एक पेड़ के रूप में मानता है। 'तत्व' वर्ग इस पेड़ में एकल नोड का प्रतिनिधित्व करता है। XML फ़ाइलों पर पढ़ने और लिखने का कार्य ElementTree स्तर पर किया जाता है। एकल XML तत्व और उसके उप-तत्वों के साथ सहभागिता तत्व स्तर पर की जाती है।
XML फ़ाइल बनाने के लिए
पेड़ तत्वों की एक पदानुक्रमित संरचना है जो जड़ से शुरू होती है और उसके बाद अन्य तत्व होती है। प्रत्येक तत्व इस मॉड्यूल के Element() फ़ंक्शन का उपयोग करके बनाया गया है।
import xml.etree.ElementTree as et e=et.Element('name')
प्रत्येक तत्व को एक टैग और एट्रिब विशेषता की विशेषता होती है जो एक तानाशाही वस्तु है। पेड़ के शुरुआती तत्व के लिए, अट्रिब एक खाली शब्दकोश है
>>> root=xml.Element('employees') >>> root.tag 'emploees' >>> root.attrib {}
अब आप मूल तत्व के अंतर्गत जोड़े जाने के लिए एक या अधिक चाइल्ड एलिमेंट सेट कर सकते हैं। प्रत्येक बच्चे में एक या अधिक उप-तत्व हो सकते हैं। Subelement() फ़ंक्शन का उपयोग करके उन्हें जोड़ें और इसकी टेक्स्ट विशेषता को परिभाषित करें।
child=xml.Element("employee") nm = xml.SubElement(child, "name") nm.text = student.get('name') age = xml.SubElement(child, "salary") age.text = str(student.get('salary'))
प्रत्येक बच्चे को एपेंड () फ़ंक्शन द्वारा
. के रूप में रूट में जोड़ा जाता हैroot.append(child)
आवश्यक संख्या में चाइल्ड एलिमेंट जोड़ने के बाद, एलिमेंटट्री () फ़ंक्शन द्वारा एक ट्री ऑब्जेक्ट का निर्माण करें
tree = et.ElementTree(root)
ट्री ऑब्जेक्ट के राइट () फ़ंक्शन द्वारा संपूर्ण ट्री स्ट्रक्चर एक बाइनरी फ़ाइल में लिखा जाता है
f = open('employees.xml', "wb") tree.write(f)
निम्नलिखित उदाहरण में पेड़ का निर्माण शब्दकोश वस्तुओं की सूची से किया गया है। प्रत्येक शब्दकोश आइटम में छात्र डेटा संरचना का वर्णन करने वाले कुंजी-मूल्य जोड़े होते हैं। इस प्रकार बनाया गया पेड़ 'myfile.xml' पर लिखा जाता है
import xml.etree.ElementTree as et employees=[{'name':'aaa','age':21,'sal':5000},{'name':xyz,'age':22,'sal':6000}] root = et.Element("employees") for employee in employees: child=xml.Element("employee") root.append(child) nm = xml.SubElement(child, "name") nm.text = student.get('name') age = xml.SubElement(child, "age") age.text = str(student.get('age')) sal=xml.SubElement(child, "sal") sal.text=str(student.get('sal')) tree = et.ElementTree(root) with open('employees.xml', "wb") as fh: tree.write(fh)
'myfile.xml' वर्तमान कार्यशील निर्देशिका में संग्रहीत है।
<employees><employee><name>aaa</name><age>21</age><sal>5000</sal></employee><employee><name>xyz</name><age>22</age><sal>60</sal></employee></employee>
XML फ़ाइल को पार्स करने के लिए
आइए अब उपरोक्त उदाहरण में बनाए गए 'myfile.xml' को वापस पढ़ें। इस प्रयोजन के लिए ElementTree मॉड्यूल में निम्नलिखित कार्यों का उपयोग किया जाएगा
ElementTree () ट्री ऑब्जेक्ट में तत्वों की पदानुक्रमित संरचना को पढ़ने के लिए यह फ़ंक्शन अतिभारित है।
tree = et.ElementTree(file='students.xml')
गेटरूट () यह फ़ंक्शन पेड़ का मूल तत्व लौटाता है
root = tree.getroot()
गेटचिल्ड्रेन () यह फ़ंक्शन किसी तत्व के एक स्तर नीचे उप-तत्वों की सूची देता है।
children = root.getchildren()
निम्नलिखित उदाहरण में, 'myfile.xml' के तत्वों और उप-तत्वों को शब्दकोश वस्तुओं की सूची में पार्स किया गया है।
import xml.etree.ElementTree as et tree = et.ElementTree(file='employees.xml') root = tree.getroot() students = [] children = root.getchildren() for child in children: employee={} pairs = child.getchildren() for pair in pairs: employee[pair.tag]=pair.text employees.append(student) print (employees)
आउटपुट
[{'name': 'aaa', 'age': '21', 'sal': '5000'}, {'name': 'xyz', 'age': '22', 'sal': '6000'}]
XML फ़ाइल को संशोधित करने के लिए
हम एलीमेंट के iter() फंक्शन का उपयोग करेंगे। यह दिए गए टैग के लिए वर्तमान तत्व के साथ रूट के रूप में एक पेड़ इटरेटर बनाता है। इटरेटर इस तत्व और इसके नीचे के सभी तत्वों पर दस्तावेज़ (गहराई पहले) क्रम में पुनरावृति करता है।
आइए हम सभी 'चिह्न' उप-तत्वों के लिए पुनरावर्तक बनाएं और प्रत्येक सैल टैग के टेक्स्ट को 100 तक बढ़ाएं।
import xml.etree.ElementTree as et tree = et.ElementTree(file='students.xml') root = tree.getroot() for x in root.iter('sal'): s = int (x.text) s = s+100 x.text=str(s) with open("employees.xml", "wb") as fh: tree.write(fh)के रूप में
हमारे 'कर्मचारी.एक्सएमएल' को अब तदनुसार संशोधित किया जाएगा।
हम एक निश्चित कुंजी के मूल्य को अपडेट करने के लिए सेट () का भी उपयोग कर सकते हैं।
x.set(marks, str(mark))