تحويل XML إلى JSON باستخدام Python، XML إلى Dictionary

اليوم سنتعلم كيفية تحويل 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