Python将字典转换为XML的方法


Posted in Python onAugust 01, 2020

问题

你想使用一个Python字典存储数据,并将它转换成XML格式。

解决方案

尽管 xml.etree.ElementTree 库通常用来做解析工作,其实它也可以创建XML文档。 例如,考虑如下这个函数:

from xml.etree.ElementTree import Element

def dict_to_xml(tag, d):
'''
Turn a simple dict of key/value pairs into XML
'''
elem = Element(tag)
for key, val in d.items():
  child = Element(key)
  child.text = str(val)
  elem.append(child)
return elem

下面是一个使用例子:

>>> s = { 'name': 'GOOG', 'shares': 100, 'price':490.1 }
>>> e = dict_to_xml('stock', s)
>>> e
<Element 'stock' at 0x1004b64c8>
>>>

转换结果是一个 Element 实例。对于I/O操作,使用 xml.etree.ElementTree 中的 tostring() 函数很容易就能将它转换成一个字节字符串。例如:

>>> from xml.etree.ElementTree import tostring
>>> tostring(e)
b'<stock><price>490.1</price><shares>100</shares><name>GOOG</name></stock>'
>>>

如果你想给某个元素添加属性值,可以使用 set() 方法:

>>> e.set('_id','1234')
>>> tostring(e)
b'<stock _id="1234"><price>490.1</price><shares>100</shares><name>GOOG</name>
</stock>'
>>>

如果你还想保持元素的顺序,可以考虑构造一个 OrderedDict 来代替一个普通的字典。请参考1.7小节。

讨论

当创建XML的时候,你被限制只能构造字符串类型的值。例如:

def dict_to_xml_str(tag, d):
  '''
  Turn a simple dict of key/value pairs into XML
  '''
  parts = ['<{}>'.format(tag)]
  for key, val in d.items():
    parts.append('<{0}>{1}</{0}>'.format(key,val))
  parts.append('</{}>'.format(tag))
  return ''.join(parts)

问题是如果你手动的去构造的时候可能会碰到一些麻烦。例如,当字典的值中包含一些特殊字符的时候会怎样呢?

>>> d = { 'name' : '<spam>' }

>>> # String creation
>>> dict_to_xml_str('item',d)
'<item><name><spam></name></item>'

>>> # Proper XML creation
>>> e = dict_to_xml('item',d)
>>> tostring(e)
b'<item><name><spam></name></item>'
>>>

注意到程序的后面那个例子中,字符 ‘<' 和 ‘>' 被替换成了 < 和 >

下面仅供参考,如果你需要手动去转换这些字符, 可以使用 xml.sax.saxutils 中的 escape() unescape() 函数。例如:

>>> from xml.sax.saxutils import escape, unescape
>>> escape('<spam>')
'<spam>'
>>> unescape(_)
'<spam>'
>>>

除了能创建正确的输出外,还有另外一个原因推荐你创建 Element 实例而不是字符串, 那就是使用字符串组合构造一个更大的文档并不是那么容易。 而 Element 实例可以不用考虑解析XML文本的情况下通过多种方式被处理。 也就是说,你可以在一个高级数据结构上完成你所有的操作,并在最后以字符串的形式将其输出。

以上就是Python将字典转换为XML的方法的详细内容,更多关于Python将字典转换为XML的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python Django模板的使用方法(图文)
Nov 04 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
pygame加载中文名mp3文件出现error
Mar 31 Python
基于python的多进程共享变量正确打开方式
Apr 28 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
pandas求两个表格不相交的集合方法
Dec 08 Python
安装docker-compose的两种最简方法
Jul 30 Python
基于python调用psutil模块过程解析
Dec 20 Python
8种常用的Python工具
Aug 05 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
python通过函数名调用函数的几种方法总结
Jun 07 Python
Python Flask异步发送邮件实现方法解析
Aug 01 #Python
Python实现弹球小游戏
Aug 01 #Python
序列化Python对象的方法
Aug 01 #Python
Python 忽略文件名编码的方法
Aug 01 #Python
Python 如何展开嵌套的序列
Aug 01 #Python
Python 日期与时间转换的方法
Aug 01 #Python
Python 执行矩阵与线性代数运算
Aug 01 #Python
You might like
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
浅谈PHP定义命令空间的几个注意点(推荐)
2016/10/29 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
仿百度输入框智能提示的js代码
2013/08/22 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
js实现的动画导航菜单效果代码
2015/09/10 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
学习使用bootstrap的modal和carousel
2016/12/09 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
使用post方法实现json往返传输数据的方法
2019/03/30 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
python中logging库的使用总结
2017/10/18 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
Python多项式回归的实现方法
2019/03/11 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
工作态度检讨书
2014/02/11 职场文书
幼儿教师工作感言
2014/02/14 职场文书
高中运动会入场词
2014/02/14 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
毕业生个人自荐书
2015/03/05 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python