2011-12-29 3 views
2

Возможно ли построить строку XML из структуры Python (например, вложенные списки, словари и т. Д.) Или это вопрос, не имеющий смысла?Создание XML из структуры Python

Есть ли стандартный инструмент?

Благодаря

+0

этот вложенный список словарь содержит тег значения? – Nilesh

+0

Если вы просто хотите сохранить некоторые объекты Python, используйте pickle. Все, что является полностью общим для объективных объектов Python, будет очень специфичным для Python, поэтому вы можете также использовать pickle. Если вы хотите взаимодействовать с каким-либо другим языком, вы должны знать, какие форматы данных (а не только «XML», но точную схему) вы также можете поддерживать на других концах, и вам нужно сообщить нам, чтобы мы могли рассказать вам, какие из них поддерживаются также Python. – delnan

+0

Мне нужен XML для сохранения данных для MS Project, и я искал что-то лучше, чем строковое построение строк. – Don

ответ

3

Если вам нужен какой-то пользовательский формат, вы можете использовать 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

+0

@ Don Да, вы можете расширить его в будущем, например, для определения атрибутов для тегов. – jcollado

4

Там нет сериализации объекта к XML в стандартной библиотеке, но есть pyxser.

Смежные вопросы