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中的进程分支fork和exec详解
Apr 11 Python
Python实现定时任务
Feb 08 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
python实现汽车管理系统
Nov 30 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
详解Python用户登录接口的方法
Apr 17 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
pytorch 在sequential中使用view来reshape的例子
Aug 20 Python
wxPython实现列表增删改查功能
Nov 19 Python
python 实现多维数组转向量
Nov 30 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 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 函数语法介绍一
2009/06/14 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
Nodejs学习笔记之NET模块
2015/01/13 NodeJs
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
自制简易打赏功能的实例
2017/09/02 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
2019/01/20 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
python3编写C/S网络程序实例教程
2014/08/25 Python
详解python实现线程安全的单例模式
2018/03/05 Python
python实现淘宝秒杀脚本
2020/06/23 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
NumPy 数组使用大全
2019/04/25 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
软件测试英文面试题
2012/10/14 面试题
大众服装店创业计划书范文
2014/01/01 职场文书
运动会标语
2014/06/21 职场文书
行政管理专业求职信
2014/07/06 职场文书
某集团股份有限公司委托书样本
2014/09/24 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书