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模块学习 filecmp 文件比较
Aug 27 Python
python将图片文件转换成base64编码的方法
Mar 14 Python
在Python下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
python基于右递归解决八皇后问题的方法
May 25 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
django 多数据库及分库实现方式
Apr 01 Python
jupyter notebook 多行输出实例
Apr 09 Python
如何基于python实现不邻接植花
May 01 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 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随机抽奖实例分析
2015/03/04 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
Python的多态性实例分析
2015/07/07 Python
在Python的Django框架中创建和使用模版
2015/07/15 Python
Python多线程扫描端口代码示例
2018/02/09 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
python递归全排列实现方法
2018/08/18 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
简单了解Java Netty Reactor三种线程模型
2020/04/26 Python
在家更换处方镜片:Lensabl
2019/05/01 全球购物
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
创业计划书——互联网商机
2014/01/12 职场文书
运动会广播稿50字
2014/01/26 职场文书
小学生家长评语集锦
2014/01/30 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
团队队名口号大全
2014/06/06 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
财务工作检讨书
2014/10/29 职场文书
大学生毕业个人总结
2015/02/15 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书