<s> '''<STR_LIT>''' <EOL> import sys <EOL> try : <EOL> import xml . etree . ElementTree as ET <EOL> except : <EOL> import cElementTree as ET <EOL> __all__ = [ '<STR_LIT>' ] <EOL> class Dict2XML ( object ) : <EOL> def __init__ ( self , coding = '<STR_LIT>' ) : <EOL> self . _root = None <EOL> self . _coding = coding <EOL> def _parse_dict ( self , edict , etree = None ) : <EOL> tree = None <EOL> for tag , value in edict . items ( ) : <EOL> if not isinstance ( value , dict ) and not isinstance ( value , list ) : <EOL> value = str ( value ) <EOL> if etree is not None and isinstance ( value , list ) : <EOL> elist = [ self . _parse_dict ( { tag : item } ) for item in value ] <EOL> for et in elist : <EOL> etree . append ( et ) <EOL> del elist <EOL> continue <EOL> elif etree is None and '<STR_LIT:@>' == tag [ : <NUM_LIT:1> ] : <EOL> etree = tree <EOL> tree = self . _make_xml ( tag , value , etree ) <EOL> return tree <EOL> def _make_xml ( self , tag , value , parent ) : <EOL> """<STR_LIT>""" <EOL> if '<STR_LIT:@>' == tag [ : <NUM_LIT:1> ] and isinstance ( value , dict ) : <EOL> tag = tag [ <NUM_LIT:1> : ] <EOL> if parent is None : <EOL> if self . _root is None : <EOL> el = ET . Element ( tag , value ) <EOL> self . _root = el <EOL> else : <EOL> el = self . _root <EOL> self . _root = None <EOL> else : <EOL> el = parent if tag == parent . tag else parent . find ( tag ) <EOL> if el is None : <EOL> el = ET . SubElement ( parent , tag , value ) <EOL> else : <EOL> el . attrib . update ( value ) <EOL> return el <EOL> stag = '<STR_LIT:#>' + tag <EOL> if stag in value : <EOL> if isinstance ( value [ stag ] , dict ) : <EOL> el = ET . Element ( tag , value [ stag ] ) <EOL> else : <EOL> el = ET . Element ( tag ) <EOL> del value [ stag ] <EOL> else : <EOL> if parent is None : <EOL> if self . _root is None : <EOL> el = ET . Element ( tag ) <EOL> self . _root = el <EOL> else : <EOL> el = self . _root <EOL> self . _root = None <EOL> else : <EOL> el = parent . find ( tag ) <EOL> if el is None : <EOL> el = ET . SubElement ( parent , tag ) <EOL> if isinstance ( value , dict ) : <EOL> self . _parse_dict ( value , el ) <EOL> else : <EOL> el . text = value <EOL> return el <EOL> def parse ( self , dict ) : <EOL> """<STR_LIT>""" <EOL> return ET . tostring ( self . _parse_dict ( dict ) ) <EOL> if __name__ == '<STR_LIT:__main__>' : <EOL> test = { '<STR_LIT>' : { '<STR_LIT>' : { '<STR_LIT:id>' : '<STR_LIT:test>' } } , <EOL> '<STR_LIT>' : { '<STR_LIT:class>' : { '<STR_LIT>' : [ { '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : '<STR_LIT:type>' , '<STR_LIT:name>' : '<STR_LIT>' } , <EOL> { '<STR_LIT>' : <NUM_LIT> , '<STR_LIT>' : { '<STR_LIT:id>' : '<STR_LIT>' } , '<STR_LIT:name>' : '<STR_LIT>' } ] , '<STR_LIT:bool>' : True } , <EOL> '<STR_LIT>' : { '<STR_LIT:id>' : '<STR_LIT:test>' } } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : { '<STR_LIT:version>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : { '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:description>' : "<STR_LIT>" , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT:title>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : [ { '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : { '<STR_LIT:target>' : '<STR_LIT>' } , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT:title>' : '<STR_LIT>' , '<STR_LIT:description>' : '<STR_LIT>' } , <EOL> { '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : { '<STR_LIT:target>' : '<STR_LIT>' } , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT:title>' : '<STR_LIT>' , '<STR_LIT:description>' : '<STR_LIT>' } ] , <EOL> '<STR_LIT:image>' : { '<STR_LIT:url>' : '<STR_LIT>' , '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT:description>' : '<STR_LIT>' , '<STR_LIT:title>' : '<STR_LIT>' } , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' } } } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : { '<STR_LIT>' : '<STR_LIT>' , '<STR_LIT:name>' : '<STR_LIT>' , '<STR_LIT:address>' : '<STR_LIT>' } } , <EOL> '<STR_LIT>' : { '<STR_LIT>' : { '<STR_LIT:x>' : [ { '<STR_LIT>' : { '<STR_LIT:a>' : '<STR_LIT:1>' } } , { '<STR_LIT>' : { '<STR_LIT:a>' : '<STR_LIT:2>' } } ] } } <EOL> } <EOL> for item in test : <EOL> obj = Dict2XML ( ) <EOL> print ( obj . parse ( test [ item ] ) ) <EOL> print </s>
