如何用Python将XML转换为YAML格式

发布时间 - 2026-01-06 00:00:00    点击率:
Python将XML转YAML需先用xmltodict.parse()解析为嵌套字典,再用yaml.dump()序列化;注意处理属性(@前缀)、同名子元素(转列表)、混合文本(#text键),并设置indent、allow_unicode、default_flow_style=False和sort_keys=False以保证可读性与结构保真。

用Python将XML转换为YAML,核心是先解析XML为Python原生数据结构(如字典、列表),再用PyYAML序列化为YAML字符串。关键在于合理处理XML的嵌套、属性、文本内容和重复子元素,避免信息丢失或结构失真。

安装必要依赖

需要两个主流库:xmltodict用于轻量、直观地将XML转为嵌套字典;pyyaml用于输出格式良好、可读性强的YAML。

执行以下命令安装:

pip install xmltodict pyyaml

基础转换:单次解析 + 标准输出

适用于结构清晰、无复杂命名空间或混合内容的XML文件。使用xmltodict.parse()读取字符串,再用yaml.dump()转出。

示例代码:

import xmltodict
import yaml

# 读取XML字符串(也可用open().read()读文件)
xml_str = """Alice30Beijing"""

# 转为有序字典
data_dict = xmltodict.parse(xml_str)

# 转为YAML,设置indent和allow_unicode保证可读性
yaml_str = yaml.dump(data_dict, indent=2, allow_unicode=True)
print(yaml_str)

输出效果接近:

root:
  name: Alice
  age: '30'
  city: Beijing

处理常见XML特性

真实XML常含属性、同名多节点、空标签或混合文本。需注意以下几点:

  • 属性默认转为@属性名:例如{"@id": "101"};如需去掉@前缀,可用xmltodict.parse(..., attr_prefix="")
  • 同名子元素自动转为列表:即使只有一个,也会变成["value"];若希望单个也保持字典,加参数force_list=("item",)
  • 文本内容与子元素并存时,用#text键保存文本:如helloworld{"a": {"#text": "hello", "b": "world"}};可设cdata_key="_text"自定义该键名

写入文件并控制YAML格式

生成YAML后,建议写入文件并启用安全、易读的选项:

with open("output.yaml", "w", encoding="utf-8") as f:
  yaml.dump(
    data_dict,
    f,
    indent=2,
    allow_unicode=True,
    default_flow_style=False,
    sort_keys=False  # 保持XML原有顺序(xmltodict默认保留顺序)
  )

default_flow_style=False确保用块格式而非JSON式内联;sort_keys=False防止字段重排,更贴近原始XML结构。


# python  # js  # json  # yy 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Laravel怎么在Controller之外的地方验证数据  网站建设要注意的标准 促进网站用户好感度!  如何有效防御Web建站篡改攻击?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  大连 网站制作,大连天途有线官网?  如何在香港免费服务器上快速搭建网站?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  如何获取上海专业网站定制建站电话?  网站制作壁纸教程视频,电脑壁纸网站?  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  Bootstrap整体框架之JavaScript插件架构  佛山网站制作系统,佛山企业变更地址网上办理步骤?  如何解决hover在ie6中的兼容性问题  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  如何用JavaScript实现文本编辑器_光标和选区怎么处理  简单实现Android文件上传  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  三星网站视频制作教程下载,三星w23网页如何全屏?  如何快速建站并高效导出源代码?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  如何在服务器上三步完成建站并提升流量?  再谈Python中的字符串与字符编码(推荐)  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  高性能网站服务器配置指南:安全稳定与高效建站核心方案  如何在IIS管理器中快速创建并配置网站?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  香港服务器部署网站为何提示未备案?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  如何在局域网内绑定自建网站域名?  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何快速生成高效建站系统源代码?  Laravel如何实现API资源集合?(Resource Collection教程)  JS去除重复并统计数量的实现方法