Python对象与xml文件的转换和输出
需求:Python编程中,常常需要将object进行xml文件的输出,当需要实现object包含列表和数组的情况下时,下面提供方法:
1.通过dict将object输出为xml:
用内置方法__dict__可以将对象转换为字典,对于对象中包含对象的情况,可以使用递归实现同样转换为字典
2.转换为dict后,用dicttoxml库实现将dict转换为xml格式string
3.转换xml为常用的缩进格式,可以用以下几种方案:
(1)使用python xml lib:xml.dom.minidom中的pretty print,不推荐,对于text为空的情况不能正确输出
(2) 使用lxml 中的etree输出属性pretty_print,用法如下:
1 from lxml import etree 2 xml_str = "<parent><child>text</child><child>other text</child></parent>" 3 root = etree.fromstring(xml_str) 4 print etree.tostring(root, pretty_print=True)
(3)使用XmlFormatter
参考:https://pypi.org/project/xmlformatter/0.1.1/
1 # coding=utf-8 2 3 import dicttoxml 4 import xmlformatter 5 6 7 class A: 8 def __init__(self): 9 self.ax = 0 10 self.ay = B() 11 self.az = 0 12 13 14 class B: 15 def __init__(self): 16 self.bx = 0 17 self.by = 0 18 self.bz = [] 19 20 21 class C: 22 def __init__(self): 23 self.cn = 0 24 self.cstr = "" 25 26 27 def convert2dict(object): 28 try: 29 root_dict = object.__dict__ 30 for key in root_dict.keys(): 31 val = root_dict[key] 32 if isinstance(val, list): 33 converted_list = [] 34 for item in val: 35 converted_list.append(convert2dict(item)) 36 val = converted_list 37 root_dict[key] = convert2dict(val) 38 return root_dict 39 except: 40 return object 41 42 43 if __name__ == '__main__': 44 a = A() 45 b = B() 46 c1 = C() 47 c2 = C() 48 a.ay = b 49 b.bz.append(c1) 50 b.bz.append(c2) 51 dict_a = convert2dict(a) 52 xml = dicttoxml.dicttoxml(dict_a, attr_type=False) # attr_type设置输出xml是否含有type 53 formatter = xmlformatter.Formatter(indent="1", indent_char='\t', preserve=["literal"]) 54 xml_format = formatter.format_string(xml) 55 print xml_format
输出:
<?xml version="1.0" encoding="UTF-8"?> <root> <ay> <bx>0</bx> <by>0</by> <bz> <item> <cstr></cstr> <cn>0</cn> </item> <item> <cstr></cstr> <cn>0</cn> </item> </bz> </ay> <ax>0</ax> <az>0</az> </root>
分类:
Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具