`
忧里修斯
  • 浏览: 437022 次
  • 性别: 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文档,我们需要将前面的步骤组合起来,并添加一些额外的功能来格式化最终的XML文档。下面的示例代码展示了如何完成这一过程: ```python @staticmethod def classToXML(classobj, ...

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

    首先,untangle库的核心功能就是将XML文档转化为Python对象,使得我们可以像操作Python字典和对象一样来处理XML元素。安装untangle库非常简单,通过pip命令即可完成: ```bash pip install untangle ``` 一旦安装...

    python文件对比 xml、excel

    这会将Excel文件转换为DataFrame对象,方便后续的数据处理。 3. **文件对比**: 要比较两个文件,可以将XML和Excel文件都转换为DataFrame,然后进行比较。比如,比较两个Excel文件: ```python df1 = pd.read_...

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

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

    基于Python实现的自动化生成XML解析类

    1. **读取XML文件**:首先,类会使用内置的`open()`函数或者`io`模块读取XML文件内容,然后使用ElementTree库的`parse()`函数将XML内容解析为Element对象树。 2. **设计解析模板**:根据XML结构,定义一个与XML元素...

    python经典入门100例 + python操作json、xml、MySQL

    例如,你可以使用`json.loads()`将JSON字符串转换为Python对象,使用`json.dumps()`将Python对象转换为JSON字符串。这在处理Web API响应、存储配置文件或跨程序数据交换时非常有用。 接下来是XML处理。XML...

    XML-RPC.rar_python xml rpc_python写xml_xml rpc_xml-rpc python

    Python的内置`open()`函数可以用来读取文件,然后可能需要使用`xml.etree.ElementTree`模块将文件内容转换为XML元素树。 `client.py`则是XML-RPC的客户端部分。客户端使用`xmlrpc.client`模块来创建一个代理对象,...

    python读取XML文件资料集合

    例如,可以使用 XMLLIB 模块来读取一个 XML 文件,并将其转换为 Python 对象。然后,可以使用 Python 对象来处理 XML 文件的内容。 Python 中还有许多其他的 XML 工具,例如 PyXML、xml.dom.minidom、xml.sax 等。...

    excel 转为xml python

    本案例中,我们关注的是如何使用Python将Excel文件转换成XML格式。这个过程涉及到对Excel数据的理解、读取,以及XML的创建和编写。以下是一些相关的知识点: 1. **Python与Excel交互**: Python中的`pandas`库提供...

    python解析xml生成excel文档

    当我们需要将XML数据转换为易于查看和分析的格式时,可以利用Python来生成Excel文档。在这个过程中,我们可以实现一些高级特性,比如添加颜色效果以增强数据的视觉表现力。 要实现这个功能,我们需要使用到Python的...

    705754193PythonXML.zip

    9. **XML与JSON转换**:Python中的`xmltodict`库可以将XML转换为Python字典,便于进一步处理。反之,`dicttoxml`库则可将字典转换为XML。 10. **实际应用**:XML常用于读取配置文件、Web服务的数据交换(如SOAP和...

    PyPI 官网下载 | xml-encoder-1.0.0.tar.gz

    XML-Encoder库的核心功能在于将Python对象转化为XML格式的数据,这在数据交换、存储或者与XML接口交互时非常有用。在Python中,我们通常使用json模块进行JSON格式的序列化和反序列化,而XML-Encoder则提供了类似的...

    pyxser:Python XML序列化

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

    python:json转换

    在Python中,我们可以使用`json.dumps()`方法将Python对象编码为JSON字符串,而`json.loads()`方法则可以将JSON字符串解析为Python对象。例如: ```python import json # Python对象 data = { "name": "John", ...

    使用Python类似pandas的方式读取xml文件的例子_pandas读取数据库

    使用`ElementTree`库解析XML文件,将其转化为Element对象树。 ```python tree = ET.parse('ex3.xml') root = tree.getroot() ``` 其中,`parse()`函数解析XML文件并返回一个ElementTree对象,`getroot()`方法...

    Python将字典转换为XML的方法

    为了将这个`Element`对象转换为字符串,可以使用`xml.etree.ElementTree`的`tostring()`函数: ```python from xml.etree.ElementTree import tostring s = {'name': 'GOOG', 'shares': 100, 'price': 490.1} e = ...

    Python获取任意xml节点值的方法

    `xml.dom.minidom`提供了解析XML文档、操作XML节点以及将XML结构转换回字符串的功能。 ```python import xml.dom.minidom ``` 在`SimpleXmlGetter`类中,我们定义了几个方法来支持不同的操作: 1. `__init__`方法...

    pysxm:简单的Python XML Marshaller

    1. **序列化(Serialization)**:将 Python 对象转换为 XML 字符串。例如,你可以定义一个 Python 类,并通过 `pysxm.dumps()` 方法将其实例转换为符合特定结构的 XML 文档。 2. **反序列化(Deserialization)**...

    Python中将字典转换为XML以及相关的命名空间解析

    要将Element对象转换为字符串,可以使用`xml.etree.ElementTree`中的`tostring()`方法: ```python from xml.etree.ElementTree import tostring s = {'name': 'GOOG', 'shares': 100, 'price': 490.1} e = dict_...

Global site tag (gtag.js) - Google Analytics