Python ملف XML - كيفية القراءة والكتابة والتحليل

ما هو XML؟

يرمز XML إلى لغة التوصيف القابلة للتوسيع. تم تصميمه لتخزين ونقل كميات صغيرة إلى متوسطة من البيانات ويستخدم على نطاق واسع لمشاركة المعلومات المنظمة.

Python يمكّنك من تحليل وتعديل مستندات XML. لتتمكن من تحليل مستند XML، يجب أن يكون لديك مستند XML بأكمله في الذاكرة. في هذا البرنامج التعليمي، سنرى كيف يمكننا استخدام فئة XML minidom في Python لتحميل وتحليل ملفات XML.

كيفية تحليل XML باستخدام minidom

لقد أنشأنا نموذجًا لملف XML وسنقوم بتحليله.

الخطوة 1) إنشاء ملف XML النموذجي

داخل الملف، يمكننا رؤية الاسم الأول واسم العائلة والمنزل ومجال الخبرة (SQL، Pythonوالاختبار والأعمال)

كيفية تحليل XML باستخدام minidom

الخطوة 2) استخدم وظيفة التحليل لتحميل ملف XML وتحليله

بمجرد الانتهاء من تحليل المستند، سنقوم بطباعة الملف "اسم العقدة" من جذر المستند و"اسم العلامة الطفل الأول ". يعد Tagname وnodename من الخصائص القياسية لملف XML.

تحليل XML باستخدام minidom

  • قم باستيراد الوحدة النمطية xml.dom.minidom وأعلن عن الملف الذي يجب تحليله (myxml.xml)
  • يحتوي هذا الملف على بعض المعلومات الأساسية عن الموظف مثل الاسم الأول واسم العائلة والمنزل والخبرة وما إلى ذلك.
  • نستخدم وظيفة التحليل في XML minidom لتحميل ملف XML وتحليله
  • لدينا متغير doc ويحصل doc على نتيجة دالة التحليل
  • نريد طباعة اسم العقدة واسم العلامة الفرعي من الملف، لذلك نعلن عنه في وظيفة الطباعة
  • قم بتشغيل الكود - يقوم بطباعة اسم العقدة (#document) من ملف XML واسم العلامة الفرعي الأول (الموظف) من ملف XML

ملاحظات:

Nodename واسم العلامة الفرعي هما الأسماء أو الخصائص القياسية لـ XML dom.

الخطوة 3) استدعاء قائمة علامات XML من مستند XML وطباعتها

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

تحليل XML باستخدام minidom

  • قم بتعريف الخبرة المتغيرة، والتي سنستخرج منها كل اسم الخبرة التي يمتلكها الموظف
  • استخدم الدالة القياسية dom المسماة "getElementsByTagName"
  • سيؤدي هذا إلى الحصول على جميع العناصر المسماة المهارة
  • أعلن عن حلقة فوق كل واحدة من علامات المهارة
  • قم بتشغيل الكود- سيعطي قائمة بأربع مهارات

كيفية كتابة عقدة XML

يمكننا إنشاء سمة جديدة باستخدام وظيفة "createElement" ثم إلحاق هذه السمة أو العلامة الجديدة بعلامات XML الموجودة. أضفنا علامة جديدة "BigData" في ملف XML الخاص بنا.

  1. يجب عليك كتابة تعليمات برمجية لإضافة السمة الجديدة (BigData) إلى علامة XML الموجودة
  2. بعد ذلك، يجب عليك طباعة علامة XML مع السمات الجديدة الملحقة بعلامة XML الموجودة

اكتب عقدة XML

  • لإضافة ملف XML جديد وإضافته إلى المستند، نستخدم الكود “doc.create items”
  • سيؤدي هذا الرمز إلى إنشاء علامة مهارة جديدة لخاصيتنا الجديدة "البيانات الضخمة"
  • أضف علامة المهارة هذه إلى المستند الطفل الأول (الموظف)
  • قم بتشغيل الكود - ستظهر العلامة الجديدة "البيانات الضخمة" مع قائمة الخبرات الأخرى

مثال على محلل XML

Python 2 مثال

import xml.dom.minidom

def main():
# use the parse() function to load and parse an XML file
   doc = xml.dom.minidom.parse("Myxml.xml");
  
# print out the document node and the name of the first child tag
   print doc.nodeName
   print doc.firstChild.tagName
  
# get a list of XML tags from the document and print each one
   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
#Write a new XML tag and add it into the document
   newexpertise = doc.createElement("expertise")
   newexpertise.setAttribute("name", "BigData")
   doc.firstChild.appendChild(newexpertise)
   print " "

   expertise = doc.getElementsByTagName("expertise")
   print "%d expertise:" % expertise.length
   for skill in expertise:
     print skill.getAttribute("name")
    
if name == "__main__":
  main();

Python 3 مثال

import xml.dom.minidom

def main():
    # use the parse() function to load and parse an XML file
    doc = xml.dom.minidom.parse("Myxml.xml");

    # print out the document node and the name of the first child tag
    print (doc.nodeName)
    print (doc.firstChild.tagName)
    # get a list of XML tags from the document and print each one
    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

    # Write a new XML tag and add it into the document
    newexpertise = doc.createElement("expertise")
    newexpertise.setAttribute("name", "BigData")
    doc.firstChild.appendChild(newexpertise)
    print (" ")

    expertise = doc.getElementsByTagName("expertise")
    print ("%d expertise:" % expertise.length)
    for skill in expertise:
        print (skill.getAttribute("name"))

if __name__ == "__main__":
    main();

كيفية تحليل XML باستخدام ElementTree

ElementTree عبارة عن واجهة برمجة تطبيقات لمعالجة XML. ElementTree هي الطريقة السهلة لمعالجة ملفات XML.

نحن نستخدم مستند XML التالي كبيانات عينة:

<data>
   <items>
      <item name="expertise1">SQL</item>
      <item name="expertise2">Python</item>
   </items>
</data>

قراءة XML باستخدام ElementTree:

يجب علينا أولاً استيراد وحدة xml.etree.ElementTree.

import xml.etree.ElementTree as ET

الآن لنجلب العنصر الجذر:

root = tree.getroot()

فيما يلي الكود الكامل لقراءة بيانات XML أعلاه

import xml.etree.ElementTree as ET
tree = ET.parse('items.xml')
root = tree.getroot()

# all items data
print('Expertise Data:')

for elem in root:
   for subelem in elem:
      print(subelem.text)

انتاج:

Expertise Data:
SQL
Python

ملخص

Python يمكّنك من تحليل مستند XML بالكامل دفعة واحدة وليس سطرًا واحدًا فقط في كل مرة. لتحليل مستند XML، يجب أن يكون المستند بأكمله في الذاكرة.

  • لتحليل وثيقة XML
  • استيراد xml.dom.minidom
  • استخدم وظيفة "تحليل" لتحليل المستند ( doc=xml.dom.minidom.parse (اسم الملف)؛
  • استدعاء قائمة علامات XML من مستند XML باستخدام التعليمات البرمجية (=doc.getElementsByTagName("اسم علامات XML")
  • لإنشاء وإضافة سمة جديدة في مستند XML
  • استخدم الوظيفة "createElement"

تلخيص هذه التدوينة بـ: