从Python结构构建XML

从Python结构构建XML

问题描述:

是否可以从Python结构(例如嵌套列表,字典等)构建XML字符串,或者它是一个无意义的问题?从Python结构构建XML

有没有标准的工具?

感谢

+0

字典的这些嵌套列表中包含的价值标签? – Nilesh 2011-12-29 11:05:21

+0

如果您只想保存一些Python对象,请使用pickle。对于任意的Python对象来说,任何完全一般的东西都将最终成为Python特有的,所以你不妨使用pickle。如果你想与其他语言进行互操作,你必须知道你可以支持哪些数据格式(不仅仅是“XML”,而是确切的模式),你需要告诉我们,所以我们可以告诉你哪些也由Python支持。 – delnan 2011-12-29 11:08:29

+0

我需要XML来保存MS Project的数据,并且我正在寻找比原始字符串构建更好的东西。 – Don 2011-12-29 13:58:09

如果您需要一些自定义格式,您可以使用xml.etree.ElementTree以编程方式生成这样的格式。例如:

from xml.etree import ElementTree 

def dict2xml(d, parent=None): 
    if parent is None: 
     parent = ElementTree.Element('xml') 

    for key, value in d.items(): 
     if isinstance(value, str): 
      element = ElementTree.SubElement(parent, key) 
      element.text = value 
    elif isinstance(value, dict): 
      element = ElementTree.SubElement(parent, key) 
      dict2xml(value, element) 
    elif isinstance(value, list): 
      for text in value: 
      element = ElementTree.SubElement(parent, key) 
      element.text = str(text) 
     else: 
      raise TypeError('Unexpected value type: {0}' 
          .format(type(value))) 


    return parent 

d = {'a': 'a contents', 
    'b': {'c': 'c contents', 
      'd': 'd contents', 
      }, 
    'e': range(3), 
    } 

print ElementTree.tostring(dict2xml(d)) 

生成以下的输出:

<xml><a>a contents</a><b><c>c contents</c><d>d contents</d></b><e>0</e><e>1</e><e>2</e></xml> 
+0

我对XML没有太多了解,但我认为这个解决方案符合我的需求:是否可以用于将来的需求? – Don 2011-12-29 16:35:33

+0

@Don是的,您可以在将来扩展它,例如,定义标签的属性。 – jcollado 2011-12-29 16:40:07

没有对象到XML序列化标准库,但有pyxser