Saya mungkin menyarankan declxml .
Pengungkapan penuh: Saya menulis perpustakaan ini karena saya sedang mencari cara untuk mengkonversi antara struktur data XML dan Python tanpa perlu menulis lusinan baris kode penguraian / serialisasi imperatif dengan ElementTree.
Dengan declxml, Anda menggunakan prosesor untuk secara deklaratif mendefinisikan struktur dokumen XML Anda dan cara memetakan antara struktur data XML dan Python. Prosesor digunakan untuk serialisasi dan parsing serta tingkat validasi dasar.
Parsing ke dalam struktur data Python sangat mudah:
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)
Yang menghasilkan output:
{'bar': {'foobar': [1, 2]}}
Anda juga dapat menggunakan prosesor yang sama untuk membuat serialisasi data ke XML
data = {'bar': {
'foobar': [7, 3, 21, 16, 11]
}}
xml.serialize_to_string(processor, data, indent=' ')
Yang menghasilkan output sebagai berikut
<?xml version="1.0" ?>
<foo>
<bar>
<type foobar="7"/>
<type foobar="3"/>
<type foobar="21"/>
<type foobar="16"/>
<type foobar="11"/>
</bar>
</foo>
Jika Anda ingin bekerja dengan objek alih-alih kamus, Anda dapat menentukan prosesor untuk mengubah data ke dan dari objek juga.
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)
Yang menghasilkan output sebagai berikut
{'bar': Bar(foobars=[1, 2])}