解析xml对象生成字典
from xml.etree import ElementTree as etree #导入xml的ElementTree对象
from xml.dom import minidom as dom
解析xml对象生成字典
class ParserData(object):
def __init__(self):
pass
def parser(self,file_object,tag='Parameter'):
dicts = dict()
#读取xml文件对象
try:
iparse = etree.iterparse(file_object,['start','end'])
except Exception,e:
print e
return dicts
#生成list
listxml = [elem for event,elem in iparse if event =='end' and elem.tag==tag]
if not listxml:
return dicts
#获取对象的name值和value值
for tag_info in listxml:
if tag_info.get('name') in dicts:
if not type(dicts[tag_info.get('name')]) is list:
dicts[tag_info.get('name')] = [dicts[tag_info.get('name')],tag_info.get('value')]
else:
dicts[tag_info.get('name')].append(tag_info.get('value'))
else:
dicts[tag_info.get('name')] = tag_info.get('value')
return dicts
字典对象生成xml对象
from xml.etree import ElementTree as etree #导入xml的ElementTree对象
from xml.dom import minidom as dom
class CreateData(object):
def init(self):
pass
def create(self,path,dicts):
root = etree.Element("Metadata") #生成树结构
root.set('version','1.0') #设置Metadata的属性
for name,value in dicts.items():
#对于多个文件的列表
if type(value) is list:
for v in value:
#在root节点上添加子节点
parameter = etree.SubElement(root,'Parameter')
parameter.set('name',name)
parameter.set('value',v)
else:
parameter = etree.SubElement(root,'Parameter')
parameter.set('name',name)
parameter.set('value',value)
#生成树结构的方法
tree =etree.tostring(root)
#调整生成xml文件的格式(正确的文件格式)
doc = dom.parseString(tree)
f = open(self.xml_file_path(path),'w')
f.write(doc.toprettyxml())
f.close()