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实现可将字符转换成大写的tcp服务器实例
Apr 29 Python
六个窍门助你提高Python运行效率
Jun 09 Python
Python基础之getpass模块详细介绍
Aug 10 Python
Python实现的购物车功能示例
Feb 11 Python
pandas object格式转float64格式的方法
Apr 10 Python
详解python中自定义超时异常的几种方法
Jul 29 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
Aug 12 Python
python2使用bs4爬取腾讯社招过程解析
Aug 14 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
Sep 15 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
python matplotlib 绘图 和 dpi对应关系详解
Mar 14 Python
Python使用Turtle模块绘制国旗的方法示例
Feb 28 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 EOT定界符的使用详解
2008/09/30 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
php中 $$str 中 "$$" 的详解
2015/07/06 PHP
Prototype Object对象 学习
2009/07/12 Javascript
Javascript读取cookie函数代码
2010/10/16 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
Python正则捕获操作示例
2017/08/19 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
致短跑运动员广播稿
2014/01/09 职场文书
小学课外阅读总结
2014/07/09 职场文书
租赁协议书
2015/01/27 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
小学生家长意见
2015/06/03 职场文书
对公司的意见和建议
2015/06/04 职场文书
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL