Python将字典转换为XML的方法
本文介绍如何使用Python的xml.etree.ElementTree库将字典转换为XML格式。通过dict_to_xml函数构建Element对象,利用tostring()生成字节串,并演示如何添加属性。重点讨论了手动拼接字符串与Element对象的区别,强调Element能自动处理特殊字符转义,推荐使用OrderedDict保持顺序,并提供了xml.sax.saxutils进行手动转义的备选方案。
问题
你需要使用Python字典来存储数据,并将其转换为XML格式。
解决方案
虽然 xml.etree.ElementTree 库通常用于解析XML,但它同样具备创建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的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









