আমি ডিক্লেক্সএমএল পরামর্শ দিতে পারে ।
সম্পূর্ণ প্রকাশ: আমি এই লাইব্রেরিটি লিখেছি কারণ আমি এলিমেট্রি দিয়ে কয়েক ডজন লাইন আবশ্যকীয় পার্সিং / সিরিয়ালাইজেশন কোড লেখার প্রয়োজন ছাড়াই এক্সএমএল এবং পাইথন ডেটা স্ট্রাকচারের মধ্যে রূপান্তর করার উপায় খুঁজছিলাম।
ডেক্সএক্সএলএমএল সহ, আপনি প্রসেসরগুলি আপনার এক্সএমএল নথিটির কাঠামো ঘোষণামূলকভাবে সংজ্ঞায়িত করতে এবং এক্সএমএল এবং পাইথন ডেটা স্ট্রাকচারের মধ্যে কীভাবে ম্যাপ করবেন তা ব্যবহার করুন। প্রসেসরগুলি সিরিয়ালাইজেশন এবং পার্সিং এবং পাশাপাশি বৈধতার প্রাথমিক স্তরের জন্য ব্যবহৃত হয়।
পাইথন ডেটা স্ট্রাকচারে পার্সিং করা সহজবোধ্য:
import declxml as xml
xml_string = """
<foo>
<bar>
<type foobar="1"/>
<type foobar="2"/>
</bar>
</foo>
"""
processor = xml.dictionary('foo', [
xml.dictionary('bar', [
xml.array(xml.integer('type', attribute='foobar'))
])
])
xml.parse_from_string(processor, xml_string)
যা আউটপুট উত্পাদন করে:
{'bar': {'foobar': [1, 2]}}
আপনি এক্সএমএলে ডেটা সিরিয়ালাইজ করতে একই প্রসেসরটি ব্যবহার করতে পারেন
data = {'bar': {
'foobar': [7, 3, 21, 16, 11]
}}
xml.serialize_to_string(processor, data, indent=' ')
যা নিম্নলিখিত আউটপুট উত্পাদন করে
<?xml version="1.0" ?>
<foo>
<bar>
<type foobar="7"/>
<type foobar="3"/>
<type foobar="21"/>
<type foobar="16"/>
<type foobar="11"/>
</bar>
</foo>
আপনি যদি অভিধানের পরিবর্তে অবজেক্টের সাথে কাজ করতে চান তবে আপনি প্রসেসরগুলি সংখ্যার পাশাপাশি অবজেক্টগুলিতে এবং ডেটা রুপান্তর করতে সংজ্ঞায়িত করতে পারেন।
import declxml as xml
class Bar:
def __init__(self):
self.foobars = []
def __repr__(self):
return 'Bar(foobars={})'.format(self.foobars)
xml_string = """
<foo>
<bar>
<type foobar="1"/>
<type foobar="2"/>
</bar>
</foo>
"""
processor = xml.dictionary('foo', [
xml.user_object('bar', Bar, [
xml.array(xml.integer('type', attribute='foobar'), alias='foobars')
])
])
xml.parse_from_string(processor, xml_string)
যা নিম্নলিখিত আউটপুট উত্পাদন করে
{'bar': Bar(foobars=[1, 2])}