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 相关文章推荐
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
Python过滤txt文件内重复内容的方法
Oct 21 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
详解小白之KMP算法及python实现
Apr 04 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
在Python中实现函数重载的示例代码
Dec 12 Python
pandas-resample按时间聚合实例
Dec 27 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
Python爬虫代理池搭建的方法步骤
Sep 28 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 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设计模式 Template (模板模式)
2011/06/26 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
react 国际化的实现代码示例
2018/09/14 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
python清除字符串里非字母字符的方法
2015/07/02 Python
Python解析json文件相关知识学习
2016/03/01 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
Python中装饰器高级用法详解
2017/12/25 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
Python自定义一个异常类的方法
2019/06/27 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
python线性插值解析
2020/07/05 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
2021/01/29 Python
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
护理学毕业生自荐信
2013/10/02 职场文书
化工机械应届生求职信
2013/11/04 职场文书
外贸业务员的岗位职责
2013/11/23 职场文书
小组合作学习反思
2014/02/18 职场文书
年度考核自我鉴定
2014/03/19 职场文书
办理护照工作证明
2014/10/10 职场文书
小学毕业教师寄语
2019/06/21 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
javascript遍历对象的五种方式实例代码
2021/10/24 Javascript
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server