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
立即学习“Python免费学习笔记(深入)”;
基础转换:单次解析 + 标准输出
适用于结构清晰、无复杂命名空间或混合内容的XML文件。使用xmltodict.parse()读取字符串,再用yaml.dump()转出。
示例代码:
import xmltodict
import yaml
# 读取XML字符串(也可用open().read()读文件)
xml_str = """
# 转为有序字典
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结构。










