黑松山资源网 Design By www.paidiu.com
本文实例讲述了Python实现对象转换为xml的方法。分享给大家供大家参考,具体如下:
# -*- coding:UTF-8 -*- ''''' Created on 2010-4-20 @author: 忧里修斯 ''' import xml.etree.ElementTree as ET import xml.dom.minidom as minidom from addrbook.domain import Person class 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 None 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) 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程序设计有所帮助。
黑松山资源网 Design By www.paidiu.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
黑松山资源网 Design By www.paidiu.com
暂无评论...
更新日志
2024年10月09日
2024年10月09日
- 【原神】V5.0攻略 | 林尼攻略一图流
- 李翊君.1993-相思的烈酒【上华】【WAV+CUE】
- 古巨基.1998-LEO.KU(国)【千禧年代】【WAV+CUE】
- 郭子.2001-原来你什么都不想要创作集丫滚石】【WAV+CUE】
- 《使命召唤:黑色行动6》新预告公布!10月25日发售
- Atlus《暗喻幻想》媒体评分汇总:高分好评如潮!
- 2024金摇杆奖提名揭晓 《黑神话》角逐最佳视觉设计!
- 群星《新说唱2024 第3期 (上)》[320K/MP3][32.76MB]
- 群星《新说唱2024 第3期 (上)》[FLAC/分轨][95.38MB]
- 群星《新说唱2024 第3期 (下)》[320K/MP3][31.36MB]
- 幻兽帕鲁手游什么时候正式上线 最新消息一览
- 西普大陆BOSS位置盘点 解锁天启纪元玩法
- 西普大陆精灵进阶培养攻略 精灵养成指南
- dnf手游法控法系职业哪个强 dnf手游法控法系职业强度排行
- 魔兽世界血藤护目镜图纸在哪买 wlk血藤护目镜图纸购买位置介绍