Python实现对象转换为xml的方法示例
本文实例讲述了Python实现对象转换为xml的方法。分享给大家供大家参考,具体如下:
#-*-coding:UTF-8-*- ''''' Createdon2010-4-20 @author:忧里修斯 ''' importxml.etree.ElementTreeasET importxml.dom.minidomasminidom fromaddrbook.domainimportPerson classConverter(object): ''''' 实现Python对象与xml之间的相互转换 ''' root=None#根节点 def__init__(self): pass @staticmethod defcreateRoot(rootTag): ''''' 创建根节点 ''' root=ET.Element(rootTag) returnroot @staticmethod defgetXmlString(element,defaultEncoding='utf-8'): ''''' 根据节点返回格式化的xml字符串 ''' try: rough_string=ET.tostring(element,defaultEncoding) reparsed=minidom.parseString(rough_string) returnreparsed.toprettyxml(indent="",encoding=defaultEncoding) except: print'getXmlString:传入的节点不能正确转换为xml,请检查传入的节点是否正确' return'' @staticmethod defclassToElements(classobj,rootTag=None): ''''' 根据传入的对象的实例,根据对象的属性生成节点,返回由节点组成的列表 classobj:对象的实例 rootTag:根节点名称 ''' attrs=None#保存对象的属性集 elelist=[]#节点列表 try: attrs=classobj.__dict__.keys()#获取该对象的所有属性(即成员变量) except: print'classToElements:传入的对象非法,不能正确获取对象的属性' ifattrs!=Noneandlen(attrs)>0:#属性存在 forattrinattrs: attrvalue=getattr(classobj,attr)#属性值 #属性节点 attrE=ET.Element(attr) attrE.text=attrvalue #加入节点列表 elelist.append(attrE) returnelelist @staticmethod defclassToXML(classobj,rootTag=None): ''''' Python自定义模型类转换成xml,转换成功返回的是xml根节点,否则返回None classobj:对象的实例 rootTag:根节点名称 ''' try: classname=classobj.__class__.__name__#类名 ifrootTag!=None: root=Converter.createRoot(rootTag) else: root=Converter.createRoot(classname) elelist=Converter.classToElements(classobj,rootTag) foreleinelelist: root.append(ele) returnroot except: print'classToXML:转换出错,请检查的传入的对象是否正确' returnNone @staticmethod defcollectionToXML(listobj,rootTag='list'): ''''' 集合(列表、元组、字典)转换为xml,转换成功返回的是xml根节点,否则返回None ''' try: classname=listobj.__class__.__name__#类名 root=Converter.createRoot(rootTag) ifisinstance(listobj,list)orisinstance(listobj,tuple):#列表或元组 iflen(listobj)>=0: forobjinlistobj:#迭代列表中的对象 itemE=Converter.classToXML(obj) root.append(itemE) elifisinstance(listobj,dict):#字典 iflen(listobj)>=0: forkeyinlistobj:#迭代字典中的对象 obj=listobj[key] itemE=Converter.classToXML(obj) itemE.set('key',key) root.append(itemE) else: print'listToXML:转换错误,传入的对象:'+classname+'不是集合类型' returnroot except: print'collectionToXML:转换错误,集合转换成xml失败' returnNone if__name__=='__main__': p1=Person('dredfsam','男','133665') p2=Person('dream','女','r') p3=Person('得分','男','sdf') personList={} personList['p1']=p1 personList['p2']=p2 personList['p3']=p3 #personList.append(p1) #personList.append(p2) #personList.append(p3) root=Converter.collectionToXML(personList) printConverter.getXmlString(root) #plist=(p1,p2,p3)#{'name':'sdf'} #printtype(plist) #printtype(plist),isinstance(plist,list)
PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线