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将动态GIF图片倒放播放的方法
Nov 02 Python
Python装饰器模式定义与用法分析
Aug 06 Python
面向初学者的Python编辑器Mu
Oct 08 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
了解不常见但是实用的Python技巧
May 23 Python
Pytorch中.new()的作用详解
Feb 18 Python
python实现udp传输图片功能
Mar 20 Python
使用Keras 实现查看model weights .h5 文件的内容
Jun 09 Python
python能在浏览器能运行吗
Jun 17 Python
Python模拟登录requests.Session应用详解
Nov 17 Python
python中os.remove()用法及注意事项
Jan 31 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实现的MySQL数据浏览器
2007/03/11 PHP
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
js opener的使用详解
2014/01/11 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
python实现将列表中各个值快速赋值给多个变量
2020/04/02 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
夜大毕业生自我评价分享
2013/11/10 职场文书
《小儿垂钓》教学反思
2014/02/23 职场文书
小学生安全教育广播稿
2014/10/20 职场文书
高考升学宴答谢词
2015/01/20 职场文书
2016年五一促销广告语
2016/01/28 职场文书