Python将字典转换为XML的方法
作者:David Beazley 发布时间:2023-08-04 16:13:22
问题
你想使用一个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文本的情况下通过多种方式被处理。 也就是说,你可以在一个高级数据结构上完成你所有的操作,并在最后以字符串的形式将其输出。
来源:https://python3-cookbook.readthedocs.io/zh_CN/latest/c06/p05_turning_dictionary_into_xml.html
猜你喜欢
- 目前代码应该没什么bug了,兼容IE6.0 & FF 1.5, 通过xHTML 的Transitional验证和 CSS 验证。为了
- 假设我们需要从各种网页中提取全文,并且要剥离所有HTML标记。通常,默认解决方案是使用BeautifulSoup软件包中的get_text方
- 简单使用csv.DictReader()方法示例代码1:import csvf = open('sample','r
- 目录:分析和设计组件编码实现和算法用 Ant 构建组件测试 JavaScript 组件本期,我们要讨论的话题是 JavaScript 的测试
- asp中我们可以利用ERR对象来判断sql语句执行是否成功:SQL="Insert INTO TABLE(F1,F2) value
- 在python中,通常通过dict和zip组合来构建键值对。比如:aid = [i for i in range(10)]name = [[
- tensorflow里面给出了一个函数用来读取图像,不过得到的结果是最原始的图像,是咩有经过解码的图像,这个函数为tf.gfile.Fast
- 这世上“没有丑女人,只有懒女人”这是女人美丽圣经里的最精彩的一句话了,一个女人只要舍得花时间琢磨怎么保养,怎么打扮,总能够找到方法展现自己美
- Mysql数据库备份和还原常用的命令是进行Mysql数据库备份和还原的关键,没有命令,什么都无从做起,更谈不上什么备份还原,只有给系统这个命
- 大家好,我叫斑马纹列表中使用两种相同的样式但颜色不同的背景,来间隔显示的内容。当然这个释义我是借鉴《designing interfaces
- 这个javascript农历日历,万年历代码网上看到的,很不错,功能齐全,值得收藏!功能介绍:动态显示当前世界各国各时区时间,显示当前农历,
- window.onload 是页面全部加载完成,包括图片、CSS、JavaScript等。但加载JavaScript的方法有很多种
- 01 实现背景1、PHPdict.txt,一个文本文件,包含可能的敏感目录后缀2、HackRequests模块,安全测试人员专用的类Requ
- JavaScript中的定时器大家基本在平时的开发中都遇见过吧,但是又有多少人去深入的理解其中的原理呢?下面我们就来分析一下定时器的实现原理
- 本文实例为大家分享了python爬取哈尔滨天气信息的具体代码,供大家参考,具体内容如下环境:windows7python3.4(pip in
- 本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalS
- 在网络设计领域关于Eye-Tracking的研究十分火爆,但是如何把这些研究结果转变为具体可行的设计来运作依旧是个难点。以下就是一些来自于E
- 一、前言本文就从数据爬取、数据清洗、数据可视化,这三个方面入手,但你简单完成一个小型的数据分析项目,让你对知识能够有一个综合的运用。整个思路
- 本文实例为大家分享了JavaScript实现年历效果的具体代码,供大家参考,具体内容如下<!DOCTYPE html><h
- 我们在编写asp程序时经常会使用到这个功能,一般我们这样判断如:if a="" then ,而这个函数考虑的就比较全面了