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中有趣在__call__函数
Jun 21 Python
python制作一个桌面便签软件
Aug 09 Python
Python实现的手机号归属地相关信息查询功能示例
Jun 08 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
selenium+python环境配置教程详解
May 28 Python
解决Django Static内容不能加载显示的问题
Jul 28 Python
Python JSON编解码方式原理详解
Jan 20 Python
Django-xadmin+rule对象级权限的实现方式
Mar 30 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
python中upper是做什么用的
Jul 20 Python
python爬取天气数据的实例详解
Nov 20 Python
Python语言中的数据类型-序列
Feb 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
一个用php3编写的简单计数器
2006/10/09 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
2011/04/20 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
PHP中SERIALIZE和JSON的序列化与反序列化操作区别分析
2016/10/11 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
python mysqldb连接数据库
2009/03/16 Python
跟老齐学Python之折腾一下目录
2014/10/24 Python
Python numpy 常用函数总结
2017/12/07 Python
python计算日期之间的放假日期
2018/06/05 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
python实现对输入的密文加密
2019/03/20 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
《猴子种树》教学反思
2014/02/14 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
文明村镇申报材料
2014/05/06 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
期末复习计划
2015/01/19 职场文书
PyMongo 查询数据的实现
2021/06/28 Python
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers