اليوم سنتعلم كيفية تحويل XML إلى JSON و XML إلى Dict في بايثون. يمكننا استخدام وحدة xmltodict
في بايثون لقراءة ملف XML وتحويله إلى Dict أو بيانات JSON. يمكننا أيضًا بث ملفات XML الكبيرة وتحويلها إلى قاموس. قبل الانتقال إلى جزء البرمجة، دعونا نفهم أولا لماذا تحويل XML ضروري.
تحويل XML إلى Dict/JSON
لقد أصبحت ملفات XML قديمة ببطء ولكن هناك أنظمة كبيرة على الويب لا تزال تستخدم هذا التنسيق. XML أثقل من JSON ولذلك، يفضل معظم المطورين الأخير في تطبيقاتهم. عندما تحتاج التطبيقات إلى فهم XML المقدم من أي مصدر، يمكن أن يكون من الممل تحويله إلى JSON. تجعل وحدة xmltodict
في بايثون هذه المهمة سهلة للغاية ومباشرة.
البدء مع xmltodict
يمكننا البدء مع وحدة xmltodict
ولكن يجب علينا تثبيتها أولا. سنستخدم بشكل رئيسي pip لأداء التثبيت.
تثبيت وحدة xmltodict
إليك كيف يمكننا تثبيت وحدة xmltodict باستخدام Python Package Index (pip):
pip install xmltodict
سيتم ذلك بسرعة لأن xmltodict
هي وحدة خفيفة جدًا. إليك ناتج هذا التثبيت: أفضل شيء في هذا التثبيت هو أن هذه الوحدة ليست تعتمد على أي وحدة خارجية أخرى وبالتالي، فهي خفيفة الوزن وتتجنب أي صراعات الإصدارات. فقط للتوضيح، على أنظمة Debian، يمكن تثبيت هذه الوحدة بسهولة باستخدام أداة
apt
:
sudo apt install python-xmltodict
نقطة زائدة أخرى هي أن هذه الوحدة لديها حزمة Debian الرسمية.
تحويل XML إلى JSON في Python
أفضل مكان لبدء استخدام هذه الوحدة هو أداء العملية التي تم تصميمها لأدائها في المقام الأول، وهو تحويل XML إلى JSON. دعنا نلقي نظرة على مقتطفات الكود لتوضيح كيفية القيام بذلك:
import xmltodict
import pprint
import json
my_xml = """
<audience>
<id what="attribute">123</id>
<name>Shubham</name>
</audience>
"""
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(xmltodict.parse(my_xml)))
لنرى الناتج لهذا البرنامج: هنا، نستخدم ببساطة وظيفة
parse(...)
لتحويل بيانات XML إلى JSON، ثم نستخدم وحدة json
لطباعة JSON بتنسيق أفضل.
تحويل ملف XML إلى JSON
حفظ بيانات XML في الشيفرة نفسها ليس دائمًا ممكنًا ولا واقعيًا. عادةً ما نحتفظ ببياناتنا في قاعدة بيانات أو بعض الملفات. يمكننا اختيار الملفات مباشرة وتحويلها إلى JSON أيضًا. دعونا نلقي نظرة على مقتطف الشيفرة كيف يمكننا أداء التحويل مع ملف XML:
import xmltodict
import pprint
import json
with open('person.xml') as fd:
doc = xmltodict.parse(fd.read())
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(doc))
لنرى الناتج لهذا البرنامج: هنا، استخدمنا وحدة أخرى pprint لطباعة الناتج بطريقة منظمة. بالإضافة إلى ذلك، كان استخدام وظيفة
open(...)
سهلاً، حيث استخدمناها للحصول على وصف ملف ومن ثم قمنا بتحليل الملف إلى كائن JSON.
تحويل XML في Python إلى Dict
كما يوحي اسم الوحدة النمطية بنفسه، يقوم xmltodict في الواقع بتحويل البيانات الـ XML التي نقدمها إلى مجرد قاموس Python. لذا، يمكننا الوصول إلى البيانات ببساطة باستخدام مفاتيح القاموس أيضًا. إليك برنامج عيني:
import xmltodict
import pprint
import json
my_xml = """
<audience>
<id what="attribute">123</id>
<name>Shubham</name>
</audience>
"""
my_dict = xmltodict.parse(my_xml)
print(my_dict['audience']['id'])
print(my_dict['audience']['id']['@what'])
لنرى الناتج لهذا البرنامج: لذا، يمكن استخدام العلامات كمفاتيح بالإضافة إلى مفاتيح السمات أيضًا. تحتاج مفاتيح السمات فقط إلى أن تسبق بالرمز
@
.
دعم مساحات الأسماء في XML
في بيانات XML، عادةً ما نمتلك مجموعة من مساحات الأسماء التي تحدد نطاق البيانات المقدمة من ملف XML. أثناء التحويل إلى تنسيق JSON، من الضروري بعد ذلك أن تستمر هذه المساحات في التنسيق JSON أيضًا. دعنا نأخذ في الاعتبار ملف XML عيني:
<root xmlns="https://defaultns.com/"
xmlns:a="https://a.com/">
<audience>
<id what="attribute">123</id>
<name>Shubham</name>
</audience>
</root>
إليك برنامج عيني حول كيفية تضمين مساحات الأسماء XML في تنسيق JSON أيضًا:
import xmltodict
import pprint
import json
with open('person.xml') as fd:
doc = xmltodict.parse(fd.read(), process_namespaces=True)
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(doc))
لنرى الناتج لهذا البرنامج:
تحويل JSON إلى XML
import xmltodict
student = {
"data" : {
"name" : "Shubham",
"marks" : {
"math" : 92,
"english" : 99
},
"id" : "s387hs3"
}
}
print(xmltodict.unparse(student, pretty=True))
import xmltodict
student = {
"name" : "Shubham",
"marks" : {
"math" : 92,
"english" : 99
},
"id" : "s387hs3"
}
print(xmltodict.unparse(student, pretty=True))
الختام
Source:
https://www.digitalocean.com/community/tutorials/python-xml-to-json-dict