डैनियल जवाब का मेरे संशोधन, एक देने के लिए marginall y neater शब्दकोश:
def xml_to_dictionary(element):
l = len(namespace)
dictionary={}
tag = element.tag[l:]
if element.text:
if (element.text == ' '):
dictionary[tag] = {}
else:
dictionary[tag] = element.text
children = element.getchildren()
if children:
subdictionary = {}
for child in children:
for k,v in xml_to_dictionary(child).items():
if k in subdictionary:
if (isinstance(subdictionary[k], list)):
subdictionary[k].append(v)
else:
subdictionary[k] = [subdictionary[k], v]
else:
subdictionary[k] = v
if (dictionary[tag] == {}):
dictionary[tag] = subdictionary
else:
dictionary[tag] = [dictionary[tag], subdictionary]
if element.attrib:
attribs = {}
for k,v in element.attrib.items():
attribs[k] = v
if (dictionary[tag] == {}):
dictionary[tag] = attribs
else:
dictionary[tag] = [dictionary[tag], attribs]
return dictionary
नाम स्थान, xmlns स्ट्रिंग, ब्रेसिज़ भी शामिल है कि सभी टैग करने के लिए ElementTree पहले जोड़ता है, इसलिए यहां मैं इसे के रूप में वहाँ पूरे दस्तावेज
एनबी के लिए एक नाम का स्थान साफ़ कर दिया है कि मैं समायोजित कच्चे एक्सएमएल भी है, ताकि 'खाली' टैग सबसे एक 'पाठ संपत्ति में ElementTree प्रतिनिधित्व
spacepattern = re.compile(r'\s+')
mydictionary = xml_to_dictionary(ElementTree.XML(spacepattern.sub(' ', content)))
में उत्पादन होता है उदाहरण के लिए देना होगा
{'note': {'to': 'Tove',
'from': 'Jani',
'heading': 'Reminder',
'body': "Don't forget me this weekend!"}}
यह विशिष्ट एक्सएमएल कि मूल रूप से json के बराबर है के लिए बनाया गया है, तत्व संभाल चाहिए विशेषता शब्दकोश/subtag शब्दकोश विलय की संभावना है इस तरह के
<elementName attributeName='attributeContent'>elementContent</elementName>
भी
के रूप में जिम्मेदार बताते हैं इसी तरह कैसे दोहराने subtags को विलय कर रहे हैं, हालांकि सूचियों को घोंसला करना उचित लगता है :-)
सुंदर सूप सबकुछ कम मामले में बदल देता है। वह वास्तव में बेकार है। मुझे टैग और मूल्यों के मामलों को संरक्षित करना है! – user236215
सुंदर सूप के लेखक कहते हैं कि ऐसा इसलिए है क्योंकि HTMLParser इसे करता है। "अगर आपको टैग केस को संरक्षित करने की आवश्यकता है, तो lxml आज़माएं"। – nealmcb