class MagicXML:
"""Converter Dict to XML
--------------------------------------------------------
Example dict:
dict = [{'tag': 'categories', 'sub': [{'tag': 'category', 'text': 'Shop', 'attr': {'id': 3, 'pop': 'op'}},
{'tag': 'category', 'attr': {'id': '25'}, 'sub': [{'tag': 'subtag',
'text': 'Hello'}]},
{'tag': 'category', 'text': 'TEXT', 'attr': {'id': '26'}}]
}]
--------------------------------------------------------
Exit:
<categories>
<category id="3" pop="op">Shop</category>
<category id="25">
<subcategory>Hello</subcategory>
</category>
<category id="26">TEXT</category>
</categories>
--------------------------------------------------------
tag - tag <categories>
sub - sub tag category <subcategory>
text - text <category id="26">TEXT</category>
attr - attributes id_str="3" id_int=3 pop="op"
"""
def __init__(self, list_dic):
self.list_dic = list_dic
def create_p(self, list_dic, tab):
free = ''
for dic_t in list_dic:
tag = ''
text = ''
tag = tag + dic_t['tag']
if 'attr' in dic_t:
for i in dic_t['attr']:
if type(dic_t['attr'][i]) is str:
tag += ' {}="{}"'.format(i, dic_t['attr'][i])
elif type(dic_t['attr'][i]) is int:
tag += ' {}={}'.format(i, dic_t['attr'][i])
if 'text' in dic_t:
text = dic_t['text']
if 'sub' in dic_t:
ret_string = '<{}>\n{}\n</{}>'.format(tag, self.create_p(dic_t['sub'], tab + '\t'), dic_t['tag'])
# ret_string = '<{}>\n{}{}\n</{}>'.format(tag, tab, self.create_p(dic_t['sub'], tab+'\t'), dic_t['tag'])
else:
ret_string = '<{}>{}</{}>'.format(tag, text, dic_t['tag'])
if free == '':
free = free + ret_string
else:
free = free + '\n' + ret_string
return free
def __repr__(self):
self.tab = '\t'
return self.create_p(self.list_dic, self.tab)