新闻中心

如何用Python将字典转换为xml字符串 xml.etree.ElementTree实战

2025-11-20
浏览次数:
返回列表
答案:通过递归遍历字典,利用xml.etree.ElementTree将嵌套字典转换为XML字符串,支持列表与基本数据类型,结合minidom实现格式化输出。

如何用python将字典转换为xml字符串 xml.etree.elementtree实战

将字典转换为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个人邮箱  知音漫客官网漫画下载_知音漫客网页版阅读记录  印象笔记怎样用批量导出备知识库_印象笔记用批量导出备知识库【备份方法】 

搜索