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实现备份文件实例
Sep 16 Python
python查找指定具有相同内容文件的方法
Jun 28 Python
python下读取公私钥做加解密实例详解
Mar 29 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
python opencv 直方图反向投影的方法
Feb 24 Python
python使用Matplotlib绘制分段函数
Sep 25 Python
python实现简单加密解密机制
Mar 19 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
详解scrapy内置中间件的顺序
Sep 28 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
python tkinter Entry控件的焦点移动操作
May 22 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/04/25 PHP
php数组合并array_merge()函数使用注意事项
2014/06/19 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
用JavaScript编写COM组件的步骤
2009/03/17 Javascript
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
js选项卡的实现方法
2015/02/09 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
JavaScript遍历求解数独问题的主要思路小结
2016/06/12 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
ionic cordova一次上传多张图片(类似input file提交表单)的实现方法
2016/12/16 Javascript
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
react基本安装与测试示例
2020/04/27 Javascript
js实现双色球效果
2020/08/02 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
Python中的fileinput模块的简单实用示例
2015/07/09 Python
python如何读写csv数据
2018/03/21 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
健身场所或家用健身设备:Life Fitness
2017/11/01 全球购物
工地门卫岗位职责
2013/12/30 职场文书
活动邀请函范文
2014/01/19 职场文书
采购意向书范本
2014/03/31 职场文书
优秀教师个人材料
2014/12/15 职场文书
深入理解redis中multi与pipeline
2021/06/02 Redis
Oracle 触发器trigger使用案例
2022/02/24 Oracle
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript