新闻中心
如何用Python将字典转换为xml字符串 xml.etree.ElementTree实战
答案:通过递归遍历字典,利用xml.etree.ElementTree将嵌套字典转换为XML字符串,支持列表与基本数据类型,结合minidom实现格式化输出。

将字典转换为XML字符串在处理数据交换、配置文件生成或API接口开发时非常常见。Python标准库中的 xml.etree.ElementTree 提供了轻量且高效的方式来构建和解析XML。下面通过实战示例,展示如何用它把字典转成XML字符串。
基本思路:递归构建Element树
字典可能是嵌套的,因此需要递归地遍历每个键值对,将键作为标签名,值作为文本内容或子节点。如果值是字典,则创建子元素;如果是列表,则为每个元素创建同名标签。
示例字典:
data = {
"person": {
"name": "张三",
"age": 30,
"address": {
"city": "北京",
"district": "朝阳区"
},
"hobbies": ["读书", "游泳", "编程"]
}
}
实现步骤
定义一个函数,接收字典并返回一个 Element 对象,然后使用 ElementTree 转为字符串。
代码如下:
import xml.etree.ElementTree as ET
from xml.dom import minidom
<p>def dict_to_xml(tag, data):
elem = ET.Element(tag)
if isinstance(data, dict):
for key, val in data.items():
child = dict_to_xml(key, val)
elem.append(child)
elif isinstance(data, list):
for item in data:
child = dict_to_xml('item', item) # 使用'item'作为列表项标签
elem.append(child)
else:
elem.text = str(data)
return elem</p><h1>示例数据</h1><p>data = {
"person": {
"name": "张三",
"age": 30,
"address": {
"city": "北京",
"district": "朝阳区"
},
"hobbies": ["读书", "游泳", "编程"]
}
}</p><h1>转换为XML元素</h1><p>root = dict_to_xml('root', data)</p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/ai/2141">
<img src="https://img.php.cn/upload/ai_manual/000/000/000/175680310868224.png" alt="小云雀">
</a>
<div class="aritcle_card_info">
<a href="/ai/2141">小云雀</a>
<p>剪映出品的AI视频和图片创作助手</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="小云雀">
<span>1949</span>
</div>
</div>
&
lt;a href="/ai/2141" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="小云雀">
</a>
</div>
<h1>美化输出(可选)</h1><p>def prettify(elem):
rough_string = ET.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent=" ")</p><p>print(prettify(root))</p>输出结果
运行以上代码,会得到类似如下的格式化XML字符串:
<?xml version="1.0" encoding="utf-8"?><root><person><name>张三</name><age>30</age><address><city>北京</city><district>朝阳区</district></address><hobbies><item>读书</item><item>游泳</item><item>编程</item></hobbies></person></root>
注意事项与优化建议
实际使用中可能需要根据需求调整结构。比如:
- 避免所有列表项都叫
<item></item>,可以传入自定义标签名。 - 处理特殊类型如
None、布尔值,建议统一转为字符串。 - 若需属性支持(如 ),可在字典中约定以
@attr或_attr开头的键表示属性。 - 直接使用
ET.tostring(root, encoding='unicode')可获得不带XML声明的字符串,适合拼接场景。
基本上就这些。利用 xml.etree.ElementTree 结合递归逻辑,能灵活地将任意深度的字典转为结构清晰的XML字符串,无需第三方依赖,适合轻量级项目快速实现。
以上就是如何用Python将字典转换为xml字符串 xml.etree.ElementTree实战的详细内容,更多请关注其它相关文章!
# 北京
# 营销网络推广只信c火9星好棒
# 长丰网站优化定制
# 皮影戏营销推广方案模板
# 连云港魏东SEO
# 谷歌seo怎么赚钱的
# 怎样网站推广
# 政务网站建设的作用
# 张槎网站优化价格
# 爬墙网站建设美丽文案
# 江干区seo哪里好
# 如何使用
# 遍历
# 键值
# python
# 如何将
# 朝阳区
# 如何用
# 转换为
# 递归
# elif
# 标准库
# 键值对
# 格式化输出
# 配置文件
# app
# xml
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台
J*aScript map 方法中处理循环元素为空数组的策略
菜鸟取件码是什么怎么查 最全查询渠道汇总
俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航
WordPress插件开发:正确注册卸载钩子与避免常见陷阱
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
Golang如何安装Swagger工具_GoSwagger文档生成环境
EMS快递官网app_中国邮政速递物流手机客户端
mcjs网页版在线存档 mcjs云存档登录入口
海量存储:机器视觉智能化的核心基石
谷歌邮箱网页版官方页面入口 谷歌邮箱网页端快速访问
Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置
飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】
如何使用纯J*aScript判断Input元素是否在特定类容器内
拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧
C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言
Linux如何排查内存不足OOME问题_LinuxOOM分析教程
红果短剧网页版官网入口 官方最新网址发布
在J*a中如何开发简易电子商务商品管理系统_商品管理系统项目实战解析
《主播少女的秘密账号迷宫》首支宣传片
漫蛙漫画登录站点 漫蛙2正版漫画快速访问
单射、满射与双射的关系 一文理清所有逻辑
Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性
Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区
在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析
实现全屏滚动与导航点:专业教程
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
J*a应用程序首次运行自动创建文件与目录的最佳实践
星露谷物语官网入口 星露谷物语游戏官网入口
在React函数组件中利用原生HTML5进行邮箱地址验证
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
微博网页版官方账号登录 微博网页版内容浏览使用指南
在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明
KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法
深入理解J*a合成构造器:何时以及为何阻止其生成
如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流
Centos/Linux 系统下安装 composer 的完整步骤
12306怎么选座位选到安静区_12306选座安静区域选择策略
C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用
解决Flask中Quill编辑器内容提交失败及TypeError的指南
深入理解Go语言中的指针类型:以*string为例
C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果
Django表单验证失败时保留用户输入数据的最佳实践
VS Code远程开发时如何处理文件权限问题
C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责
C++ explicit关键字防止隐式转换_C++构造函数安全规范
163邮箱注册官网 免费申请163个人邮箱
知音漫客官网漫画下载_知音漫客网页版阅读记录
印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】


2025-11-20
浏览次数:次
返回列表
lt;a href="/ai/2141" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="小云雀">
</a>
</div>
<h1>美化输出(可选)</h1><p>def prettify(elem):
rough_string = ET.tostring(elem, 'utf-8')
reparsed = minidom.parseString(rough_string)
return reparsed.toprettyxml(indent=" ")</p><p>print(prettify(root))</p>