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实现ip查询示例
Mar 26 Python
Python中的yield浅析
Jun 16 Python
Python做简单的字符串匹配详解
Mar 21 Python
django中的HTML控件及参数传递方法
Mar 20 Python
Python3的介绍、安装和命令行的认识(推荐)
Oct 20 Python
python 使用值来排序一个字典的方法
Nov 16 Python
python3 http提交json参数并获取返回值的方法
Dec 19 Python
Python新手学习函数默认参数设置
Jun 03 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
Python进行统计建模
Aug 10 Python
mac安装python3后使用pip和pip3的区别说明
Sep 01 Python
python time.strptime格式化实例详解
Feb 03 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分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
js校验表单后提交表单的三种方法总结
2014/02/28 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
jQuery验证插件validate使用详解
2016/05/11 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
bootstrap组件之按钮式下拉菜单小结
2017/01/19 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
国际贸易专业求职信
2014/06/04 职场文书
大学生简历自我评价2015
2015/03/03 职场文书