本文实例讲述了Python实现对象转换为xml的方法。分享给大家供大家参考,具体如下:
# -*- Coding:UTF-8 -*-'''''Created on 2010-4-20@author: 忧里修斯'''import xml.etree.ElementTree as ETimport xml.dom.minIDom as minIDomfrom addrbook.domain import Personclass Converter(object): ''''' 实现Python对象与xml之间的相互转换 ''' root = None#根节点 def __init__(self): pass @staticmethod def createRoot(roottag): ''''' 创建根节点 ''' root = ET.Element(roottag) return root @staticmethod def getXmlString(element,defaultEnCoding='utf-8'): ''''' 根据节点返回格式化的xml字符串 ''' try: rough_string = ET.tostring(element,defaultEnCoding) reparsed = minIDom.parseString(rough_string) return reparsed.toprettyxml(indent=" ",enCoding=defaultEnCoding) except: print 'getXmlString:传入的节点不能正确转换为xml,请检查传入的节点是否正确' return '' @staticmethod def classtoElements(classobj,roottag=None): ''''' 根据传入的对象的实例,根据对象的属性生成节点,返回由节点组成的列表 classobj:对象的实例 roottag:根节点名称 ''' attrs = None#保存对象的属性集 eleList = []#节点列表 try: attrs = classobj.__dict__.keys()#获取该对象的所有属性(即成员变量) except: print 'classtoElements:传入的对象非法,不能正确获取对象的属性' if attrs != None and len(attrs) > 0:#属性存在 for attr in attrs: attrvalue = getattr(classobj,attr)#属性值 #属性节点 attrE = ET.Element(attr) attrE.text = attrvalue #加入节点列表 eleList.append(attrE) return eleList @staticmethod def classtoXML(classobj,roottag=None): ''''' Python自定义模型类转换成xml,转换成功返回的是xml根节点,否则返回None classobj:对象的实例 roottag:根节点名称 ''' try: classname = classobj.__class__.__name__ #类名 if roottag != None: root = Converter.createRoot(roottag) else: root = Converter.createRoot(classname) eleList = Converter.classtoElements(classobj,roottag) for ele in eleList: root.append(ele) return root except: print 'classtoXML:转换出错,请检查的传入的对象是否正确' return None @staticmethod def collectionToXML(Listobj,roottag='List'): ''''' 集合(列表、元组、字典)转换为xml,转换成功返回的是xml根节点,否则返回None ''' try: classname = Listobj.__class__.__name__ #类名 root = Converter.createRoot(roottag) if isinstance(Listobj,List) or isinstance(Listobj,tuple):#列表或元组 if len(Listobj) >= 0: for obj in Listobj:#迭代列表中的对象 itemE = Converter.classtoXML(obj) root.append(itemE) elif isinstance(Listobj,dict):#字典 if len(Listobj) >= 0: for key in Listobj:#迭代字典中的对象 obj = Listobj[key] itemE = Converter.classtoXML(obj) itemE.set('key',key) root.append(itemE) else: print 'ListToXML:转换错误,传入的对象:'+classname+'不是集合类型' return root except: print 'collectionToXML:转换错误,集合转换成xml失败' return Noneif __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) print Converter.getXmlString(root)# pList = (p1,p2,p3)#{'name':'sdf'}# print type(pList)# print type(pList),isinstance(pList,List)
PS:这里再为大家提供几款关于xml *** 作的在线工具供大家参考使用:
在线XML/JsON互相转换工具:
http://tools.jb51.net/code/xmljson
在线格式化XML/在线压缩XML:
http://tools.jb51.net/code/xmlformat
XML在线压缩/格式化工具:
http://tools.jb51.net/code/xml_format_compress
XML代码在线格式化美化工具:
http://tools.jb51.net/code/xmlcodeformat
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python *** 作xml数据技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串 *** 作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录 *** 作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
总结以上是内存溢出为你收集整理的Python实现对象转换为xml的方法示例全部内容,希望文章能够帮你解决Python实现对象转换为xml的方法示例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)