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继承和抽象类的实现方法
Jan 14 Python
python脚本实现xls(xlsx)转成csv
Apr 10 Python
Windows和Linux下Python输出彩色文字的方法教程
May 02 Python
python数据类型判断type与isinstance的区别实例解析
Oct 31 Python
python+pygame简单画板实现代码实例
Dec 13 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 Python
基于python if 判断选择结构的实例详解
May 06 Python
新手如何发布Python项目开源包过程详解
Jul 11 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
pycharm的python_stubs问题
Apr 08 Python
python的html标准库
Apr 29 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中使用正则表达式进行查找替换
2013/06/13 PHP
php实现编辑和保存文件的方法
2015/07/20 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
Javascript之String对象详解
2016/06/08 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
JavaScript组合模式---引入案例分析
2020/05/23 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
Python快速排序算法实例分析
2017/11/29 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
从python读取sql的实例方法
2020/07/21 Python
python实现KNN近邻算法
2020/12/30 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
实习自我评价怎么写
2013/12/02 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
会计专业自我鉴定
2014/02/10 职场文书
《小松树和大松树》教学反思
2014/02/20 职场文书
爱国演讲稿500字
2014/05/04 职场文书
应届生求职信
2014/05/31 职场文书
房租涨价通知
2015/04/23 职场文书
研讨会致辞
2015/07/31 职场文书