2011-12-29 26 views
2

Python構造体(例えば、ネストされたリスト、辞書など)からXML文字列を構築することは可能ですか、それとも意味のない質問ですか?Python構造体からXMLを構築する

標準ツールはありますか?

おかげ

+0

これらのネストされたリストは、値のタグが含まれていますか? – Nilesh

+0

Pythonオブジェクトを保存したいだけなら、pickleを使用します。任意のPythonオブジェクトに対して完全に一般的なものは、Python固有のものになりますので、pickleを使用することもできます。他の言語との相互運用が必要な場合は、他のエンドでもサポートできるデータ形式(「XML」ではなく、正確なスキーマ)を把握しておかなければなりません。 Pythonでもサポートされています。 – delnan

+0

私はMS Project用のデータを保存するためにXMLが必要です。私は生の文字列構築よりも優れたものを探していました。 – 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があります。