Python将字典转换为XML的方法

慢慢来
慢慢来
发布时间:2026-10-12 | 3人浏览过
原创

本文介绍如何使用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>&lt;spam&gt;</name></item>'
>>>

注意程序后方的示例,字符 ‘<' 和 ‘>' 已被自动替换为 &lt; 和 &gt;。

以下仅供参考,若需手动转换这些字符,可使用 xml.sax.saxutils 模块中的 escape() 和 unescape() 函数。例如:

>>> from xml.sax.saxutils import escape, unescape
>>> escape('<spam>')
'&lt;spam&gt;'
>>> unescape(_)
'<spam>'
>>>

除了能生成正确的输出外,推荐创建 Element 实例而非字符串的另一个原因是:通过字符串组合来构建更大的文档并非易事。而 Element 实例允许你在无需解析XML文本的情况下,以多种方式处理数据。也就是说,你可以在一个高级数据结构上完成所有操作,最后再将其输出为字符串。

以上就是Python将字典转换为XML的方法的详细内容,更多关于Python将字典转换为XML的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表