কম্পিউটার

পাইথনে ElementTree XML API


এক্সটেনসিবল মার্কআপ ল্যাঙ্গুয়েজ (এক্সএমএল) অনেকটা এইচটিএমএল এর মতই একটি মার্কআপ ভাষা। এটি একটি পোর্টেবল এবং এটি কোনো SQL ডাটাবেস ব্যবহার না করেই ছোট থেকে মাঝারি পরিমাণের ডেটা পরিচালনার জন্য উপযোগী৷

পাইথনের স্ট্যান্ডার্ড লাইব্রেরিতে xml প্যাকেজ রয়েছে। এই প্যাকেজটিতে ElementTree মডিউল রয়েছে। এটি একটি সহজ এবং হালকা XML প্রসেসর API৷

XML হল শ্রেণীবিন্যাস সংক্রান্ত তথ্য বিন্যাসের মতো একটি গাছ। এই মডিউলের 'ElementTree' পুরো XML নথিটিকে একটি গাছ হিসাবে বিবেচনা করে। 'এলিমেন্ট' ক্লাস এই ট্রিতে একটি একক নোড উপস্থাপন করে। XML ফাইলে পড়া এবং লেখার ক্রিয়াকলাপ ElementTree স্তরে সম্পন্ন হয়। একটি একক XML উপাদান এবং এর উপ-উপাদানগুলির সাথে মিথস্ক্রিয়াগুলি উপাদান স্তরে সম্পন্ন হয়৷

XML ফাইল তৈরি করতে

গাছ হল মূল থেকে শুরু করে অন্যান্য উপাদানের অনুসৃত উপাদানগুলির একটি শ্রেণিবদ্ধ কাঠামো। এই মডিউলের Element() ফাংশন ব্যবহার করে প্রতিটি উপাদান তৈরি করা হয়।

import xml.etree.ElementTree as et
e=et.Element('name')

প্রতিটি উপাদান একটি ট্যাগ এবং বৈশিষ্ট্য বৈশিষ্ট্য দ্বারা চিহ্নিত করা হয় যা একটি dict বস্তু। গাছের প্রারম্ভিক উপাদানের জন্য, attrib হল একটি খালি অভিধান

>>> 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'))

প্রতিটি শিশুকে

হিসেবে append() ফাংশন দ্বারা রুটে যোগ করা হয়
root.append(child)

প্রয়োজনীয় সংখ্যক চাইল্ড উপাদান যোগ করার পর, elementTree() ফাংশন

দ্বারা একটি ট্রি অবজেক্ট তৈরি করুন
tree = et.ElementTree(root)

ট্রি অবজেক্টের write() ফাংশন

দ্বারা সম্পূর্ণ ট্রি স্ট্রাকচার একটি বাইনারি ফাইলে লেখা হয়
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')

getroot() এই ফাংশনটি গাছের মূল উপাদান প্রদান করে

root = tree.getroot()

getchildren() এই ফাংশনটি একটি উপাদানের এক স্তরের নীচে উপ-উপাদানের তালিকা প্রদান করে।

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)

আমাদের 'employees.xml' এখন সেই অনুযায়ী সংশোধন করা হবে।

আমরা একটি নির্দিষ্ট কী এর মান আপডেট করতে সেট() ব্যবহার করতে পারি।

x.set(marks, str(mark))

  1. পাইথনে একটি প্রদত্ত বাইনারি ট্রিতে সবচেয়ে বড় পারফেক্ট সাবট্রি খুঁজুন

  2. পাইথনে সিমেট্রিক ট্রি

  3. পাইথনে XML পার্সিং?

  4. পাইথন ডিবাগার (পিডিবি)