XML和YAML都是常用的数据交换格式,XML结构严谨但冗余度高,YAML语法简洁可读性更强,很多场景下需要将XML数据转换为YAML格式。实现这个转换的核心逻辑是先解析XML获取结构化数据,再将结构化数据按照YAML的规则输出。

准备工作
首先需要安装两个核心依赖库,一个是用于解析XML的xmltodict,另一个是用于生成YAML的PyYAML,可以通过pip命令安装:
pip install xmltodict pyyaml
核心转换步骤
1. 解析XML为字典
xmltodict库可以将XML字符串或者文件解析为Python字典,保留原有的嵌套结构,这是转换的第一步。示例代码如下:
import xmltodict
# 示例XML内容
xml_content = """
<user>
<name>张三</name>
<age>25</age>
<hobbies>
<hobby>阅读</hobby>
<hobby>跑步</hobby>
</hobbies>
</user>
"""
# 解析XML为字典
xml_dict = xmltodict.parse(xml_content)
print(xml_dict)
上述代码执行后得到的字典结构如下:
{
"user": {
"name": "张三",
"age": "25",
"hobbies": {
"hobby": ["阅读", "跑步"]
}
}
}
2. 字典转换为YAML
得到字典后,使用PyYAML的yaml.dump方法就可以将字典转换为YAML格式的内容,需要注意设置合适的参数保证输出格式符合常规YAML规范。
import yaml # 将字典转换为YAML字符串 yaml_content = yaml.dump(xml_dict, allow_unicode=True, sort_keys=False) print(yaml_content)
其中allow_unicode参数设置为True可以保证中文正常显示,sort_keys设置为False可以避免字典的键被自动排序,保留原有的结构顺序。
3. 完整转换函数
将上面的步骤整合,就可以得到一个通用的XML转YAML的函数,支持从文件读取XML内容并输出YAML文件:
import xmltodict
import yaml
def xml_to_yaml(xml_file_path, yaml_file_path):
# 读取XML文件内容
with open(xml_file_path, "r", encoding="utf-8") as f:
xml_content = f.read()
# 解析XML为字典
xml_dict = xmltodict.parse(xml_content)
# 转换为YAML并写入文件
with open(yaml_file_path, "w", encoding="utf-8") as f:
yaml.dump(xml_dict, f, allow_unicode=True, sort_keys=False)
print(f"转换完成,YAML文件已保存至{yaml_file_path}")
# 调用示例
# xml_to_yaml("input.xml", "output.yaml")
注意事项
- XML中的属性会被
xmltodict解析为以@开头的键,比如<user id="1">会解析为{"user": {"@id": "1"}},转换后YAML中也会保留这个格式,如果不需要可以提前处理字典。 - XML中单个子节点和多个同名子节点的解析结果不同,单个子节点会解析为值,多个同名子节点会解析为列表,转换时需要根据实际XML结构调整逻辑。
- 如果XML内容包含
<、>、&等特殊字符,xmltodict会自动处理转义,不需要额外操作。
常见问题处理
如果遇到XML解析报错,首先检查XML格式是否合法,可以使用XML校验工具提前验证。如果YAML输出内容不符合预期,可以调整yaml.dump的参数,比如设置default_flow_style参数控制列表的显示格式:
# 让列表以块格式显示,更符合YAML常规写法 yaml_content = yaml.dump(xml_dict, allow_unicode=True, sort_keys=False, default_flow_style=False)
PythonXMLYAMLxml_to_dictPyYAML修改时间:2026-07-10 16:12:33