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之os操作方法(详解)
Jun 15 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
python库matplotlib绘制坐标图
Oct 18 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
Python如何实现定时器功能
May 28 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
基于PyInstaller各参数的含义说明
Mar 04 Python
linux中nohup和后台运行进程查看及终止
Jun 24 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处理excel cvs表格的方法实例介绍
2013/05/13 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
PHP模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
浅谈JS中String()与 .toString()的区别
2016/10/20 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
ES6对象操作实例详解
2020/05/23 Javascript
python 布尔操作实现代码
2013/03/23 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
python 调用c语言函数的方法
2017/09/29 Python
python实现二叉查找树实例代码
2018/02/08 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
基于PyTorch中view的用法说明
2021/03/03 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
如何设置Java的运行环境
2013/04/05 面试题
护理职业应聘自荐书
2013/09/29 职场文书
党组织公开承诺书
2014/03/29 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
创先争优个人总结
2015/03/04 职场文书
获奖感言怎么写
2015/07/31 职场文书
Java实现注册登录跳转
2022/06/16 Java/Android
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android