You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.8 KiB
67 lines
1.8 KiB
'''
|
|
Created on Jun 17, 2015
|
|
|
|
@author: danimar
|
|
'''
|
|
|
|
import xml.etree.ElementTree as ET
|
|
from collections import OrderedDict
|
|
|
|
class DynamicXml(object):
|
|
def __getattr__(self, name):
|
|
try:
|
|
return object.__getattribute__(self,name)
|
|
except:
|
|
self.__setattr__(name, None)
|
|
return object.__getattribute__(self,name)
|
|
|
|
def __setattr__(self, obj, val):
|
|
if(obj=="value" or obj=="atributos"):
|
|
object.__setattr__(self,obj, val)
|
|
else:
|
|
object.__setattr__(self,obj, DynamicXml(val))
|
|
|
|
def __init__(self, value):
|
|
self.value = value
|
|
self.atributos={}
|
|
object.__setattr__(self, '__dict__', OrderedDict())
|
|
|
|
def __str__(self):
|
|
return str(self.value)
|
|
def __call__(self, *args, **kw):
|
|
if(len(kw)>0):
|
|
self.atributos=kw
|
|
if(len(args)>0):
|
|
self.value= args[0]
|
|
else:
|
|
return self.value
|
|
|
|
def __getitem__(self, i):
|
|
print(self.value)
|
|
if(i >= len(self.value)):
|
|
self.value.append(DynamicXml(None))
|
|
return self.value[i]
|
|
|
|
|
|
def gerar_xml(xml, objeto):
|
|
for attr, value in objeto.__dict__.items():
|
|
if(attr!="value" and attr!="atributos"):
|
|
if(type(value()) == type([])):
|
|
for item in value():
|
|
print(item)
|
|
gerar_xml(xml, item)
|
|
else:
|
|
sub = ET.SubElement(xml,attr)
|
|
if(str(value)!="None"):
|
|
sub.text = str(value)
|
|
gerar_xml(sub, value)
|
|
elif(attr=="atributos"):
|
|
for atr, val in value.items():
|
|
xml.set(atr.replace("__", ":"), str(val))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|