Python将字典转换为XML的方法

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

本文介绍如何使用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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。