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的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
python计算牛顿迭代多项式实例分析
May 07 Python
分享Python文本生成二维码实例
Jan 06 Python
Python中列表与元组的乘法操作示例
Feb 10 Python
详解flask表单提交的两种方式
Jul 21 Python
Python从函数参数类型引出元组实例分析
May 28 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
Jun 26 Python
Python何时应该使用Lambda函数
Jul 02 Python
使用python实现多维数据降维操作
Feb 24 Python
Python使用plt.boxplot() 参数绘制箱线图
Jun 04 Python
python生成随机数、随机字符、随机字符串
Apr 06 Python
python使用pycharm安装pyqt5以及相关配置
Apr 22 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文件下载类
2006/12/06 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
js读取本地文件的实例
2017/12/22 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
JavaScript的console命令使用实例
2019/12/03 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
总结python爬虫抓站的实用技巧
2016/08/09 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
python跳出双层for循环的解决方法
2019/06/24 Python
python 获取sqlite3数据库的表名和表字段名的实例
2019/07/17 Python
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
小班秋游活动方案
2014/02/22 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
2014年街道办事处工作总结
2014/12/11 职场文书
校长师德表现自我评价
2015/03/05 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
2015国庆节宣传语
2015/07/14 职场文书
教师学习心得体会范文
2016/01/21 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL