كيفية التعامل مع ملفات XML باستخدام مكتبة xml.etree.ElementTree في Python

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 19 ديسمبر 2024

محتوى المقال

كيفية التعامل مع ملفات XML باستخدام مكتبة xml.etree.ElementTree في Python

تعد ملفات XML (لغة التوصيف الموسعة) أحد التنسيقات الشائعة لتخزين ونقل البيانات. تتيح لك مكتبة xml.etree.ElementTree في Python قراءة وتحرير وإنشاء ملفات XML بسهولة. في هذا المقال، سنتعرف على كيفية استخدام هذه المكتبة لمعالجة ملفات XML، بدءًا من قراءة الملفات وانتهاءً بإنشاء ملفات XML جديدة.

ما هي مكتبة xml.etree.ElementTree؟

xml.etree.ElementTree هي مكتبة مضمنة في Python تُستخدم للتعامل مع ملفات XML. توفر هذه المكتبة واجهة بسيطة للعمل مع عناصر XML وتتيح لك تحليل (parsing) ملفات XML، البحث داخلها، تعديلها، وإنشاء ملفات جديدة.

قراءة ملفات XML

أول خطوة في التعامل مع ملفات XML هي قراءتها. يمكنك استخدام دالة parse() لتحليل محتوى ملف XML وتحميله في ذاكرة Python كعنصر شجرة (ElementTree).

مثال على قراءة ملف XML

لنفترض أن لدينا ملف XML بسيط يسمى sample.xml يحتوي على هيكل بيانات مثل التالي:

<data>
    <item name="item1">
        <price>19.99</price>
        <quantity>3</quantity>
    </item>
    <item name="item2">
        <price>5.99</price>
        <quantity>10</quantity>
    </item>
</data>

لتحليل هذا الملف في Python، يمكنك استخدام الكود التالي:

import xml.etree.ElementTree as ET

# قراءة الملف وتحليله
tree = ET.parse("sample.xml")
root = tree.getroot()

# عرض اسم الجذر
print("اسم الجذر:", root.tag)

في هذا المثال، نقوم بقراءة ملف sample.xml باستخدام parse()، ثم نستخدم getroot() للحصول على الجذر (root) لشجرة XML. بعد ذلك، نعرض اسم الجذر باستخدام tag.

التنقل في شجرة XML

بعد قراءة ملف XML، يمكنك التنقل داخل شجرة XML للوصول إلى العناصر الفرعية. يمكن القيام بذلك باستخدام التكرار على Element أو البحث عن عناصر معينة باستخدام find() وfindall().

الوصول إلى العناصر الفرعية

يمكنك التكرار على العناصر الفرعية لعناصر معينة كما يلي:

# التكرار على جميع العناصر الفرعية للجذر
for child in root:
    print("العنصر:", child.tag, child.attrib)

سيعرض هذا الكود كل عنصر فرعي للجذر، مع اسم العنصر وخصائصه.

البحث عن عناصر معينة

إذا كنت تبحث عن عنصر معين بناءً على اسمه أو خصائصه، يمكنك استخدام find() أو findall(). لنفترض أنك تريد العثور على جميع العناصر المسماة "item":

# البحث عن جميع العناصر المسماة "item"
items = root.findall("item")

# عرض تفاصيل كل عنصر
for item in items:
    print("العنصر:", item.attrib)
    print("السعر:", item.find("price").text)

هذا الكود يبحث عن جميع العناصر المسماة "item" داخل الجذر، ويعرض خصائصها وقيمة العنصر الفرعي "price" لكل منها.

تحرير ملفات XML

بالإضافة إلى قراءة ملفات XML، يمكنك أيضًا تحرير العناصر الموجودة داخل ملف XML باستخدام مكتبة ElementTree. يمكن تحرير النصوص، الخصائص، أو حتى إضافة أو حذف عناصر.

تحرير النصوص والخصائص

يمكنك تعديل النصوص والخصائص للعناصر باستخدام text وattrib:

# تغيير السعر للعنصر الأول
items[0].find("price").text = "29.99"

# تعديل خاصية "name" للعنصر الثاني
items[1].set("name", "item2_modified")

في هذا المثال، قمنا بتغيير السعر للعنصر الأول وتعديل خاصية "name" للعنصر الثاني.

إضافة وحذف عناصر

يمكنك إضافة عناصر جديدة أو حذف عناصر موجودة باستخدام Element وremove().

# إنشاء عنصر جديد
new_item = ET.Element("item", attrib={"name": "item3"})
price = ET.SubElement(new_item, "price")
price.text = "9.99"
quantity = ET.SubElement(new_item, "quantity")
quantity.text = "2"

# إضافة العنصر الجديد إلى الجذر
root.append(new_item)

# حذف العنصر الثاني
root.remove(items[1])

هنا قمنا بإنشاء عنصر جديد يسمى "item3" وأضفناه إلى الجذر، كما قمنا بحذف العنصر الثاني من الشجرة.

حفظ التغييرات في ملف XML

بعد إجراء التعديلات على شجرة XML، يمكنك حفظ التغييرات في ملف جديد أو استبدال الملف الأصلي باستخدام دالة write().

# حفظ التغييرات في ملف جديد
tree.write("modified_sample.xml")

سيتم حفظ جميع التغييرات في ملف modified_sample.xml.

إنشاء ملفات XML من الصفر

يمكنك أيضًا إنشاء ملفات XML جديدة بالكامل من الصفر باستخدام مكتبة ElementTree. يتم ذلك عن طريق إنشاء عناصر جديدة باستخدام Element ثم بناء شجرة XML وإضافة العناصر الفرعية لها.

مثال على إنشاء ملف XML

لنقم بإنشاء ملف XML بسيط يحتوي على بعض العناصر الأساسية:

# إنشاء عنصر الجذر
root = ET.Element("store")

# إنشاء عناصر فرعية
item1 = ET.SubElement(root, "item", attrib={"name": "item1"})
price1 = ET.SubElement(item1, "price")
price1.text = "19.99"

item2 = ET.SubElement(root, "item", attrib={"name": "item2"})
price2 = ET.SubElement(item2, "price")
price2.text = "29.99"

# إنشاء شجرة XML وحفظها في ملف
tree = ET.ElementTree(root)
tree.write("new_store.xml")

في هذا المثال، قمنا بإنشاء ملف XML جديد يسمى new_store.xml يحتوي على عنصر الجذر "store" وعناصر فرعية "item" لكل منها.

الخاتمة

تعد مكتبة xml.etree.ElementTree أداة قوية ومرنة للتعامل مع ملفات XML في Python. سواء كنت بحاجة إلى قراءة ملفات XML، تحريرها، أو حتى إنشاء ملفات جديدة من الصفر، توفر لك هذه المكتبة الأدوات اللازمة لإنجاز مهامك بكفاءة. نأمل أن يكون هذا المقال قد قدم لك فهماً شاملاً لكيفية استخدام ElementTree لمعالجة ملفات XML.

طور مهاراتك: مقالات يجب قراءتها في البرمجة