मैं सुझाव दे सकता हूं ।
पूर्ण प्रकटीकरण: मैंने इस लाइब्रेरी को लिखा क्योंकि मैं XML और पायथन डेटा संरचनाओं के बीच कनवर्ट करने के लिए एक रास्ता खोज रहा था, जिसमें ElementTree के साथ अनिवार्य पार्सिंग / क्रमांकन कोड की दर्जनों लाइनें लिखने की आवश्यकता नहीं थी।
डेक्सएक्सएमएल के साथ, आप प्रोसेसर का उपयोग अपने एक्सएमएल दस्तावेज़ की संरचना को परिभाषित करने के लिए करते हैं और एक्सएमएल और पायथन डेटा संरचनाओं के बीच मैप कैसे करें। प्रोसेसर का उपयोग क्रमबद्धता और पार्सिंग दोनों के साथ-साथ मूल स्तर के सत्यापन के लिए किया जाता है।
पायथन डेटा संरचनाओं में पार्स करना सीधा है:
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])}