Python实现对象转换为xml的方法示例


Posted in Python onJune 08, 2017

本文实例讲述了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)
Python 相关文章推荐
python 控制语句
Nov 03 Python
使用IPython下的Net-SNMP来管理类UNIX系统的教程
Apr 15 Python
python列表的增删改查实例代码
Jan 30 Python
python 与服务器的共享文件夹交互方法
Dec 27 Python
python 多线程串行和并行的实例
Feb 22 Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
Mar 01 Python
python读取yaml文件后修改写入本地实例
Apr 27 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
用Python制作mini翻译器的实现示例
Aug 17 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
python - timeit 时间模块
Apr 06 Python
Python实现的手机号归属地相关信息查询功能示例
Jun 08 #Python
python用pickle模块实现“增删改查”的简易功能
Jun 07 #Python
Python3 socket同步通信简单示例
Jun 07 #Python
Python实现获取磁盘剩余空间的2种方法
Jun 07 #Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 #Python
Python中音频处理库pydub的使用教程
Jun 07 #Python
python中defaultdict的用法详解
Jun 07 #Python
You might like
php 获取完整url地址
2008/12/20 PHP
php中通过curl smtp发送邮件
2012/06/05 PHP
php对mongodb的扩展(初出茅庐)
2012/11/11 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
Python语言描述随机梯度下降法
2018/01/04 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
深入理解Django的中间件middleware
2018/03/14 Python
django 自定义过滤器的实现
2019/02/26 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
One.com挪威:北欧成长最快的网络托管公司
2016/11/19 全球购物
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
编辑个人求职信范文
2013/09/21 职场文书
幼儿园家长评语
2014/02/10 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python