`
忧里修斯
  • 浏览: 426976 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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实现对象转换为xml的方法示例

    主要介绍了Python实现对象转换为xml的方法,结合实例形式分析了Python对象属性、节点的操作及与xml相互转换的相关实现技巧,需要的朋友可以参考下

    Python-untangle将XML文档转换为Python对象使其可以方便的访问

    untangle:将XML文档转换为Python对象,使其可以方便的访问

    untangle, 将XML转换为 python 对象.zip

    untangle, 将XML转换为 python 对象 解开 文档文档将XML转换为 python 对象。具有相似名称的同级将分组到列表中。子对象可以使用 parent.child 访问,具有 element['attribute']的属性。你可以使用文件名。URL或

    pyxser:Python XML序列化

    换句话说,它可以将Python对象转换为XML,也可以将该XML返回原始Python对象。 它在对象树和XML树上使用了预遍历树算法。 该算法为O(n),并使用一些编译器构造技术作为备注来创建对象树中每个元素的唯一实例。 它...

    解开:将XML转换为Python对象

    解开将XML转换为Python对象。 具有相似名称的兄弟姐妹被分组到一个列表中。 可以使用parent.child来访问子级,使用element['attribute']属性来访问子级。 您可以使用文件名,URL或XML字符串调用parse()方法。 替换- ...

    digester-python.rar_python xml to soap

    一个用Python实现的将XML源文件转化成Python对象结构的转换器。使用时请将转化规则写到config.xml文件中。使用该程序后可以避免每次都写冗长的读取xml文件创建对象结构的过程。当使用混合编程时,该程序也可以被用于...

    Python(面向对象编程语言) v3.4.0.zip

    这是为什么 Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。 高层语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的...

    Python访问Mysql数据库

    Python 的创始人为Guido van Rossum,它是一种简单易学, 功能强大的编程语言。它有高效率的高层数据结构,简单而有效 地实现面向对象编程。Python 简洁的语法和对动态输入的支持, 再加上解释性语言的本质,使得它...

    Python编程入门经典

    15.7 Python中可用的XML库 257 15.8 SAX的含义 257 15.8.1 基于流 258 15.8.2 事件驱动 258 15.8.3 DOM的含义 258 15.8.4 内存中访问 258 15.9 使用SAX或者DOM的 理由 259 15.9.1 能力权衡 259 15.9.2 内存考虑 259 ...

    Modern Python Cookbook_Python教程

    Python处理对对象的引用。 第5章,用户输入和输出,将解释如何使用不同的特性 print()函数。 我们还将研究用于提供用户输入的不同功能。 第6章,类和对象的基础知识,将创建实现若干个 统计公式。 第7章,更高级的类...

    Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法

    分别从xml字符串和xml文件转换为xml对象,然后解析xml内容,查询指定信息字段。 from xml.dom.minidom import parse, parseString from xml.etree import ElementTree import xml.dom.minidom Get XML String info...

    Objects365/COCO数据集转换为xml格式,并转为yolo的txt格式,xml数据统计更改+源代码+文档说明

    1、资源内容:Objects365/COCO数据集转换为xml格式,并转为yolo的txt格式,xml数据统计更改 2、代码特点:内含运行结果,不会运行可私信,参数化编程、参数可方便更改、代码编程思路清晰、注释明细,都经过测试运行...

    Python中xml和json格式相互转换操作示例

    本文实例讲述了Python中xml和json格式相互转换操作。分享给大家供大家参考,具体如下: Python中xml和json格式是可以互转的,就像json格式转Python字典对象那样。 xml格式和json格式互转用到的xmltodict库 安装...

    Python Cookbook

    12.5 将一个XML文档转化成Python对象树 449 12.6 从XML DOM节点的子树中删除仅有空白符的文本节点 451 12.7 解析Microsoft Excel的XML 452 12.8 验证XML文档 454 12.9 过滤属于指定命名空间的元素和属性 455 ...

    python cookbook(第3版)

    5.21 序列化Python对象 第六章:数据编码和处理 6.1 读写CSV数据 6.2 读写JSON数据 6.3 解析简单的XML数据 6.4 增量式解析大型XML文件 6.5 将字典转换为XML 6.6 解析和修改XML 6.7 利用命名空间解析XML...

    python-dehydrate:使用简单容器将对象表示为字典的小库

    一个明显的用例是将带有方法、大量属性等的复杂对象转换为用于序列化的 dicts(转换为 json/yaml/xml/pickle/whatever)。 您可以通过描述如何从对象中获取值以及如何使用简单的语法以脱水结构呈现它来控制脱水过程...

    YOLO训练标签xml格式文件转txt格式文件python编写小脚本

    YOLOv5训练图像数据需要对图片打标签,标签的格式有许多,比较...我使用python编写了一个脚本,使用正则表达式提取标签对象的信息内容,再进行相应的处理,转化为txt文件。代码可读性强,简单明了,效率高,可下载。

    dicttoxml:简单的库,可将Python词典或其他本机数据类型转换为有效的XML字符串

    将Python字典或其他本机数据类型转换为有效的XML字符串。 细节 支持item( int , float , long , decimal.Decimal , bool , str , unicode , datetime , none和其他类似数字的对象)和collection( list , ...

    xtdiff:此REPO是不推荐使用的Python库,用于比较两个XML树并生成一组将一个转换为另一个的动作

    这意味着它是一个库,它将比较两个(lxml)XML树并生成一组将一棵树转换为另一棵树的操作。 要求 它支持Python 2.7和Python 3.4,但实际上,您应该使用Python 3,不是吗? xtdiff要求: 安装 xtdiff可以作为Python...

Global site tag (gtag.js) - Google Analytics