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 with用法实例
Apr 14 Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
深入理解NumPy简明教程---数组3(组合)
Dec 17 Python
Python标准库sched模块使用指南
Jul 06 Python
详解Python函数可变参数定义及其参数传递方式
Aug 02 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
Dec 21 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
Oct 11 Python
用python拟合等角螺线的实现示例
Dec 27 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
Python中flatten( ),matrix.A用法说明
Jul 05 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 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 404错误页面实现代码
2009/06/22 PHP
LotusPhp笔记之:Cookie组件的使用详解
2013/05/06 PHP
PHP序列化操作方法分析
2016/09/28 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
jQuery 使用手册(六)
2009/09/23 Javascript
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
2013/06/24 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
在Express中提供静态文件的实现方法
2019/10/17 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
Python返回真假值(True or False)小技巧
2015/04/10 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
Python单元测试简单示例
2018/07/03 Python
python反编译学习之字节码详解
2019/05/19 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
python制作英语翻译小工具代码实例
2019/09/09 Python
python 两个数据库postgresql对比
2019/10/21 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
PatPat香港:婴童服饰和亲子全家装在线购物
2020/09/27 全球购物
个人违纪检讨书
2014/09/15 职场文书
个人贷款收入证明
2014/10/26 职场文书
惊天动地观后感
2015/06/10 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python
Python字符串的转义字符
2022/04/07 Python
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL