Python怎么把XML扁平化处理-XML/RSS教程

Python XML扁平化核心是递归遍历+路径拼接生成键值对,常用xml.etree.ElementTree(轻量)或lxml(支持命名空间/CData),亦可用pandas.read_xml处理表格型XML。

Python把XML扁平化,核心是把嵌套的树状结构转成一维的键值对(如字典或列表),常用方法是递归遍历+路径拼接。关键在于如何定义“扁平化”——多数场景指生成形如 {"root.child.grandchild": "value"} 的结构,或带类型/属性信息的展平结果。

用xml.etree.ElementTree递归提取(轻量、标准库)

适合结构较规则、不需保留命名空间或复杂属性的XML。思路是深度优先遍历,用点号连接路径,遇到文本内容就存入字典:

  • 跳过纯空白文本和注释节点
  • 对同一层级多个同名子元素,可加序号后缀(如 "items.item.0.name")避免覆盖
  • 若需保留属性,可拼在路径末尾(如 "div.@class")或单独存为 "div.attr.class"

示例代码片段:

import xml.etree.ElementTree as ET

def flatten_xml(element, path="", result=None): if result is None: result = {}

当前路径(去掉开头的点)

current_path = f"{path}.{element.tag}" if path else element.tag
# 存文本内容(非None且非空白)
if element.text and element.text.strip():
    result[current_path] = element.text.strip()
# 处理属性
for k, v in element.attrib.items():
    result[f"{current_path}.@{k}"] = v
# 递归子元素
for child in element:
    flatten_xml(child, current_path, result)
return result

tree = ET.fromstring("12")
print(flatten_xml(tree))

输出:{'root.a': '1', 'root.b.c': '2', 'root.b.c.@attr': 'x'}

用lxml增强处理(支持命名空间、XPath、更健壮)

当XML含命名空间、CDATA、混合内容或需按条件筛选时,lxml 更可靠。它提供 iter()、XPath 和 getchildren() 等灵活接口:

立即学习“Python免费学习笔记(深入)”;

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Python怎么把XML扁平化处理-XML/RSS教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3997685+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1391+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 3997686+
  • 本周更新: 0+
  • 最后更新: 2026-03-16