2017-08-25 48 views
0

我是Python新手。我想做递归函数来从复杂字典中生成xml(即词典的字典,例如如何从Python中的复杂词典中制作xml

dataDict = {'item1': 'this in item1', 'item2': 'this in item2', 'item3': 'this is item3'} rootDict = {'name': 'Daud', 'code': 'MC111011', 'data': dataDict})。

这是我已经试过了,

from lxml import etree 
 

 
def dict_to_xml(dictData): 
 
    for key,val in dictData.items(): 
 
     if isinstance(val, type(dict)): 
 
      child = dict_to_xml(val) 
 
      if child is not None: 
 
       yield from child 
 
     else: 
 
      yield key, val 
 
      child = etree.Element(key) 
 
      child.text = str(val) 
 
     return child 
 

 

 
# create XML 
 
dataDict = {'item1': 'this in item1', 'item2': 'this in item2', 'item3': 'this is item3'} 
 
rootDict = {'data': dataDict} 
 
for key, value in rootDict.items(): 
 
    if isinstance(value, type(dict)): 
 
     childElement = dict_to_xml(value) 
 
    else: 
 
     childElement = etree.Element(key) 
 
     childElement.text = str(value) 
 

 

 
root = etree.Element('root') 
 
root.append(etree.Element('child')) 
 
# another child with text 
 

 
root.append(childElement) 
 

 

 
# pretty string 
 
s = etree.tostring(root, pretty_print=True) 
 
print(s)

我得到以下输出

b"<root>\n <child/>\n <data>{'item1': 'this in item1', 'item2': 'this in item2', 'item3': 'this is item3'}</data>\n</root>\n" 

请指引我,我错过了什么。谢谢

回答

0

希望这有助于!

from dicttoxml import dicttoxml 

dataDict = {'item1': 'this in item1', 'item2': 'this in item2', 'item3': 'this is item3'} 
rootDict = {'name': 'Daud', 'code': 'MC111011','data': dataDict} 

xml = dicttoxml(rootDict, custom_root='myXML', attr_type=False) 
print xml 

输出是:

<myXML><code>MC111011</code><data><item2>this in item2</item2><item3>this is item3</item3><item1>this in item1</item1></data><name>Daud</name></myXML> 
+0

@ user6159419请不要忘记,让我们知道是否能解决你的问题,因为它会帮助其他人的情况下,他们面临着类似的问题在未来。 – Prem