欢迎使用CSDN-markdown编辑器

解析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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值