كيفية قراءة ملفات XML في بايثون

إن القدرة على استخراج المعلومات من تنسيقات ملفات مختلفة هي مهارة بالغة الأهمية في تحليل البيانات. ولا يختلف الأمر مع ملف XML: XML هو تنسيق ملف شائع في معالجة البيانات، وخاصةً عندما تتعامل مع البيانات المستلمة من واجهة برمجة التطبيقات. إذا كنت محلل بيانات مبتدئًا تخوض تجربة في بيئة بايثون، فإن إتقان فن قراءة XML في بايثون يمكن أن يعزز مجموعة مهاراتك بشكل كبير.

في هذا الدليل الموجه للمبتدئين، سنستعرض عملية قراءة ملفات XML في بايثون. سنبدأ بشرح ماهية ملفات XML وكيفية هيكلة البيانات. بعد ذلك، سنتعلم كيفية قراءة بيانات XML في بايثون باستخدام بعض الطرق البسيطة.

ماذا يوجد في ملف XML؟

XML (اختصارًا لـ Extensible Markup Language) هو تنسيق ملف نصي عادي مصمم لتخزين البيانات ونقلها. وتتمثل ميزته الرئيسية في تخزين البيانات في تسلسل هرمي عشوائي. وهذا يتناقض بشكل مباشر مع تنسيقات النص العادي الأخرى التي تخزن البيانات، مثل جدول CSV (يمكنك القراءة عنه في هذه المقالة حول ملفات CSV في بايثون).

كما يوحي الاسم، فإن XML هي لغة ترميز، لذا يمكنك توقع تخزين البيانات في علامات مثل: . في XML، غالبًا ما يشار إلى العلامات على أنها عناصر. HTML (لغة ترميز النص التشعبي) هو تنسيق ملف ترميز شائع آخر، ولكن على عكس XML، يتم استخدامه في المقام الأول لعرض البيانات على صفحات الويب. يركز XML على وصف بنية ومحتوى البيانات بتنسيق هرمي قابل للتخصيص.

بنية ملف XML

تتكون ملفات XML من هياكل هرمية منظمة في عناصر ومحتويات. تغلف هذه العناصر البيانات وتوفر طريقة لتمثيل العلاقات بين قطع المعلومات المختلفة.

لا يختلف هذا عن قواميس بايثون، التي تخزن العناصر كأزواج مفتاح-قيمة. في هذا القياس، يكون مفتاح القاموس هو العنصر الموجود في ملف XML، وتكون قيمة القاموس هي محتوى XML.

خذ بعين الاعتبار ملف XML التالي الذي يخزن معلومات حول الكتب:

<library>
  <book>
    <title>The Great Gatsby</title>
    <author>F. Scott Fitzgerald</author>
    <genre>Classic</genre>
    <year>1925</year>
  </book>
  <book>
    <title>To Kill a Mockingbird</title>
    <author>Harper Lee</author>
    <genre>Novel</genre>
    <year>1960</year>
  </book>
</library>

في ملف XML هذا، يوجد كل شيء داخل عنصر <library>  : يتم “فتح” العنصر في السطر الأول، ثم يتم “إغلاقه” في النهاية عن طريق كتابة <library> . وهذا يعني أنه العنصر الجذر لملف XML هذا.

التسلسل الهرمي لملف XML

يحتوي عنصر <library> الجذر على عناصر <book> متعددة. بدوره، يحتوي كل عنصر <book> على عناصر <title> و<author> و<genre> و<year>، مما يخزن معلومات مختلفة عن كل كتاب كمحتوى في XML.

تتكون العناصر في XML بشكل طبيعي من تسلسل هرمي للآباء والأبناء. في هذا المثال، يمكننا القول إن عنصر <library> هو العنصر الأب لعنصر <book>، أو أن عنصري <title> و<year> هما العنصران الابن لعنصر <book>. هذا الهيكل الهرمي للمكتبات التي تحتوي على كتب، والتي تحتوي بدورها على معلومات عن عنوان الكتاب ومؤلفه ونوعه وسنة إصداره، هو نوع المعلومات التي يمكن لملفات XML تخزينها ونقلها بفعالية.

بالإضافة إلى ذلك، لاحظ كيف يتم إنشاء التسلسل الهرمي ببساطة عن طريق فتح وإغلاق العناصر في أجزاء معينة من ملف XML. تسمح لنا هذه الآلية البسيطة بتخزين هياكل هرمية عشوائية في XML، حتى لو كانت تتضمن مئات العناصر. في الواقع، تستخدم التنسيقات مثل XLSX XML في الأساس لإدارة كل التعقيدات الكامنة وراء جدول بيانات Excel. (توضح هذه المقالة كيفية قراءة ملفات Excel في Python مباشرةً).

يمكن تخصيص ملفات XML بشكل أكبر عن طريق تمرير السمات والقيم داخل وسم العنصر. على سبيل المثال، يمكننا إضافة سمتين عشوائيتين (attr1 وattr2) وقيمهما الخاصة إلى عنصر <book عن طريق كتابة <book attr1="value1", attr2="value2">.

في هذه المقالة، سنبقي الأمور بسيطة من خلال العمل مع العناصر التي لا تحتوي على أي سمات أو قيم.

أين يتم استخدام ملفات XML؟

كما رأينا، توفر لغة XML طريقة مرنة ومستقلة عن المنصة لتمثيل البيانات المنظمة. كما أن تنسيقها القابل للقراءة من قبل البشر وقدرتها على تعريف عناصر مخصصة تجعلها مناسبة لتطبيقات مختلفة حيث يكون تنظيم البيانات والتوافق أمرًا ضروريًا. ولهذا السبب، تُستخدم ملفات XML بشكل أساسي في سيناريوهين: ملفات التكوين وتبادل البيانات.

كملف تكوين، غالبًا ما يتم استخدام XML لتحديد كيفية تشغيل برنامج معين. قد يكون هذا خادم ويب، أو برنامجًا يستخدمه نظام التشغيل الخاص بك، أو نصًا بسيطًا مكتوبًا بلغة بايثون.

على سبيل المثال، قد يبدو ملف تكوين XML لقاعدة البيانات على النحو التالي:

<config>
  <database>
    <username>admin</username>
    <password>secretpassword</password>
    <database_name>mydatabase</database_name>
  </database>
  <server>
    <port>8080</port>
    <timeout>300</timeout>
    <max_connections>100</max_connections>
  </server>
  <logging>
    <level>DEBUG</level>
  </logging>
</config>

يقوم ملف XML أعلاه بتخزين المعلومات المتعلقة ببيانات اعتماد قاعدة البيانات وإعدادات الخادم ووظيفة التسجيل.

من ناحية أخرى، يمكن أن يخدم XML أيضًا في تبادل البيانات بين الأنظمة. إذا كان برنامج بايثون النصي الخاص بك يستورد البيانات ويصدرها بتنسيق XML، فسيصبح من الأسهل بكثير دمجها مع أنظمة أخرى تستخدم XML أيضًا. لا يهم نوع قاعدة البيانات أو التخزين الذي تعيش فيه بياناتك – طالما أنك تعرف كيفية القراءة منها والكتابة إليها مرة أخرى من خلال XML. ولهذا السبب، يعد XML تنسيقًا شائعًا لاستهلاك البيانات في واجهات برمجة التطبيقات.

على سبيل المثال، قد يمثل نموذج XML أدناه النتيجة من استعلام في قاعدة بيانات الموظفين الخاصة بشركتك:

<employees>
  <employee>
    <name>John</name>
    <department>Marketing</department>
    <position>Manager</position>
  </employee>
  <employee>
    <name>Mary</name>
    <department>Finance</department>
    <position>Analyst</position>
  </employee>
</employees>

الآن بعد أن فهمنا أساسيات XML، دعنا نتعمق في كيفية قراءة ملفات XML بكفاءة في بايثون لمزيد من التحليل والمعالجة.

كيفية قراءة ملفات XML في بايثون

لدينا خياران مختلفان للمكتبات عند العمل مع XML في بايثون. في هذا القسم، سنستكشف كيفية قراءة ملفات XML في بايثون باستخدام كل من المكتبات المضمنة والتابعة لجهات خارجية. وسنقارن بين أساليبها ووظائفها.

في كل مثال، سوف نستخدم ملف books.xml، والذي يتم عرض محتواه أدناه:

<bookstore>
  <book>
    <title>Python Programming</title>
    <author>John Smith</author>
    <price>29.99</price>
  </book>
  <book>
    <title>Data Analysis with Python</title>
    <author>Mary Kate</author>
    <price>39.99</price>
  </book>
</bookstore>

قراءة ملف XML باستخدام وحدة XML المضمنة في بايثون

توفر وحدة xml وظائف لتحليل بيانات XML ومعالجتها. نظرًا لأن هذه الوحدة جزء من مكتبة بايثون القياسية، فلا توجد حاجة لتثبيت أي شيء .

توفر فئة ElementTree ضمن هذه الوحدة طريقة ملائمة للتنقل بين أشجار XML واستخراج المعلومات ذات الصلة. ألق نظرة على المثال التالي:

import xml.etree.ElementTree as ET
 
tree = ET.parse('books.xml')
root = tree.getroot()
 
for book in root.findall('book'):
    title = book.find('title').text
    author = book.find('author').text
    price = book.find('price').text
    print(f"Title: {title}, Author: {author}, Price: {price}")
 
# output:
# Title: Python Programming, Author: John Smith, Price: 29.99
# Title: Data Analysis with Python, Author: Mary Kate, Price: 39.99

في الكود أعلاه، نستخدم ElementTree لتحليل ملف books.xml. يستخرج التابع ElementTree.getroot() العنصر الجذري (أي علامة <bookstore> ) إلى المتغير root. بعد ذلك، نستخدم التابع root.findall() للعثور على جميع عناصر <book> أسفل العنصر الجذري في التسلسل الهرمي لـ XML.

ثم نكرر كل عنصر <book> المسترجع ونحصل على المحتوى المقابل لعناصره الفرعية <title> و<author> و<price> باستخدام التابع book.find(). وأخيرًا، نطبع المعلومات المستخرجة لكل كتاب في سلسلة منسقة. وهذا يعرض عنوان كل كتاب ومؤلفه وسعره.

استخدام BeautifulSoup لقراءة ملف XML في بايثون

يمكننا أيضًا استخدام BeautifulSoup لقراءة ملف XML في بايثون. BeautifulSoup هي مكتبة بايثون تابعة لجهة خارجية تُستخدم لتحليل البيانات المخزنة كلغة ترميز. تُستخدم بشكل أكثر شيوعًا لتحليل المعلومات في ملفات HTML (خاصة تلك التي تم الحصول عليها من كشط الويب)، ولكن يمكنك استخدام المكتبة لتحليل المحتوى في ملفات XML أيضًا.

إذا لم يكن لديك BeautifulSoup في بيئة بايثون الخاصة بك، فأنت بحاجة إلى تثبيته باستخدام pip. ستحتاج أيضًا إلى تثبيت lxml لجعل BeautifulSoup متوافقًا مع ملفات XML. قم بتنفيذ الأمر التالي في الطرفية لتثبيت المكتبتين في وقت واحد:

pip install beautifulsoup4 lxml

الأمثلة التالية تؤدي نفس المهمة تمامًا مثل المثال السابق، ولكنها تستبدل وحدة xml بـ BeautifulSoup:

from bs4 import BeautifulSoup
 
with open('books.xml') as f:
    soup = BeautifulSoup(f, 'xml')
 
for book in soup.find_all('book'):
    title = book.title.text
    author = book.author.text
    price = book.price.text
    print(f"Title: {title}, Author: {author}, Price: {price}")
 
# output:
# Title: Python Programming, Author: John Smith, Price: 29.99
# Title: Data Analysis with Python, Author: Mary Kate, Price: 39.99

كما نرى، فإن البنية الأساسية للكود تظل كما هي. الاختلافات الوحيدة هي:

  • كان علينا فتح ملف XML صراحةً باستخدام open() في بايثون.
  • يتيح لنا BeautifulSoup الوصول إلى عنصر فرعي كما لو كان سمة، أي أنه يمكننا كتابة title.text بدلاً من book.find("title").text.
  • توجد اختلافات بسيطة في بناء الجملة، على سبيل المثال، تتم كتابة طريقة استرداد جميع عناصر written find_all() بدلاً من findall().

بخلاف هذه التفاصيل الصغيرة، فإن كلا النهجين يؤديان نفس الغرض تمامًا. استخدم أيهما يناسبك أكثر!

قراءة ملف XML في قاموس بايثون باستخدام xmltodict

كما ذكرنا سابقًا، يتم تنظيم ملفات XML بشكل مشابه لقواميس بايثون. وفي حين أن بناء الجملة مختلف، فإن البنية الهرمية وأسماء العلامات العشوائية لملف XML تذكرنا بقواميس بايثون.

في الواقع، يمكننا الجمع بين قواميس وقوائم بايثون لتخزين نفس البيانات بالضبط في books.xml:

xml_dict = {
  "bookstore": {
    "book": [
      {
        "title": "Python Programming",
        "author": "John Smith",
        "price": "29.99"
      },
      {
        "title": "Data Analysis with Python",
        "author": "Jane Doe",
        "price": "39.99"
      }
    ]
  }
}

يثير هذا التشابه السؤال التالي: هل يمكننا تحليل محتويات ملف XML مباشرة إلى قاموس بايثون؟ لحسن الحظ، تقوم مكتبة الطرف الثالث xmltodict بذلك بالضبط. لاستخدامها، نحتاج إلى تثبيتها مع pip:

pip install xmltodict

بمجرد تثبيته، كل ما نحتاج إلى فعله هو قراءة محتويات ملف XML كسلسلة بايثون. نقوم بتمريرها إلى xmltodict.parse() حتى تتمكن من أداء مهمتها السحرية:

import xmltodict
 
with open('books.xml') as f:
   xml_string = f.read()
 
xml_dict = xmltodict.parse(xml_string)
print(xml_dict)
 
# output:
# {
#   'bookstore': {
#     'book': [
#       {
#         'title': 'Python Programming'
#         'author': 'John Smith',
#         'price': '29.99'
#       },
#       {
#         'title': 'Data Analysis with Python',
#         'author': 'Mary Kate',
#         'price': '39.99'
#       }
#     ]
#   }
# }

بفضل وحدة xmltodict، تمكنا من قراءة البيانات بأكملها من XML في قاموس بايثون في بضعة أسطر فقط.

إذا كنت تحتاج فقط إلى استخراج بعض المعلومات – أو إذا كنت بحاجة إلى تنفيذ خط أنابيب معالجة بيانات مخصص عند قراءة ملف XML – فقد يكون من الأفضل الالتزام بوحدات xml أو BeautifulSoup. ولكن إذا كان كل ما تحتاجه هو طريقة سريعة لقراءة البيانات في ملف XML، فإن وحدة xmltodict تؤدي المهمة بشكل جيد.

ما هو التالي مع قراءة ملفات XML في بايثون؟

في هذه المقالة، تناولنا كيفية قراءة ملفات XML في بايثون. بدأنا بفهم ما هو ملف XML بالضبط وأين يتم استخدامه عادةً. ثم استكشفنا كيفية قراءة ملف XML في بايثون باستخدام ثلاث مكتبات مختلفة: xml وBeautifulSoup وxmltodict.

إن القدرة على قراءة ملفات XML في بايثون تفتح عالمًا من الاحتمالات لمحللي البيانات. سواء كان الأمر يتعلق باستخراج أو تحرير البيانات من ملفات التكوين، أو تحليل الاستجابات من خدمة ويب أو واجهة برمجة تطبيقات، أو تحليل البيانات المنظمة، فإن فهم كيفية التعامل مع XML في بايثون يعد مهارة قيمة لأي شخص يعمل مع البيانات في بايثون.

لتعزيز مهاراتك في تحليل البيانات باستخدام بايثون، نوصيك بالاطلاع على قراءة وكتابة ملفات CSV، وقراءة وكتابة ملفات Excel. ومثل XML، تعد تنسيقات الملفات هذه من بين أكثر التنسيقات استخدامًا من قبل أي محلل بيانات ماهر.


اكتشاف المزيد من بايثون العربي

اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Scroll to Top

اكتشاف المزيد من بايثون العربي

اشترك الآن للاستمرار في القراءة والحصول على حق الوصول إلى الأرشيف الكامل.

Continue reading