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求素数示例分享
Feb 16 Python
Python中用sleep()方法操作时间的教程
May 22 Python
python基础教程之分支、循环简单用法
Jun 16 Python
Python数据结构与算法之字典树实现方法示例
Dec 13 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
python批量复制图片到另一个文件夹
Sep 17 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
django settings.py 配置文件及介绍
Jul 15 Python
Python @property装饰器原理解析
Jan 22 Python
python ffmpeg任意提取视频帧的方法
Feb 21 Python
python实现感知机模型的示例
Sep 30 Python
Django实现随机图形验证码的示例
Oct 15 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检测移动设备类mobile detection使用实例
2014/04/14 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
pjblog修改技巧汇总
2007/03/12 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
JS 插件dropload下拉刷新、上拉加载使用小结
2017/04/13 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
python单链表实现代码实例
2013/11/21 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
Python二叉树定义与遍历方法实例分析
2018/05/25 Python
Django处理多用户类型的方法介绍
2019/05/18 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
python实现统计代码行数的小工具
2019/09/19 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
python生成word合同的实例方法
2021/01/12 Python
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
高中英语演讲稿范文
2014/04/24 职场文书
机械系毕业生求职信
2014/05/28 职场文书
单位授权委托书范本
2014/09/26 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
英文产品推荐信
2015/03/27 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP
python垃圾回收机制原理分析
2022/04/13 Python