Python如何遍历XML的同时获取父节点信息

2026-01-10编程代码108175

最直接可靠的方式是使用lxml库的getparent()方法;标准库xml.etree.ElementTree需手动维护父关系,如递归传参或iterparse栈模拟,不推荐动态打补丁。

在Python中遍历XML并同时获取父节点信息,最直接可靠的方式是使用 lxml 库的 getparent() 方法——标准库 xml.etree.ElementTree 默认不保存父引用,需手动维护或改用 lxml。

用 lxml 一键获取父节点

lxml 的 Element 对象原生支持 .getparent(),无需额外配置:

  • 安装: pip install lxml
  • 解析后任意节点调用 node.getparent() 即可返回其父元素(根节点返回 None
  • 支持 XPath、迭代、修改等完整功能,性能优于标准库

示例:

Runwayml(AI painting)

Runway 平台的文本生成图像AI工具

下载

from lxml import etree

xml_str = "text"
root = etree.fromstring(xml_str)

for elem in root.iter():
    parent = elem.getparent()
    print(f"标签: {elem.tag}, 父标签: {parent.tag if parent is not None else 'None'}")

用 xml.etree.ElementTree 手动构建父关系

如果必须用标准库,可通过递归遍历时显式传递父节点:

  • 不依赖外部包,适合轻量或受限环境
  • 遍历时把当前节点作为参数传给子节点处理函数
  • 避免后期反复查找父节点,逻辑清晰可控

示例:

import xml.etree.ElementTree as ET

def walk_with_parent(elem, parent=None):
    print(f"当前: {elem.tag}, 父节点: {parent.tag if parent is not None else 'None'}")
    for child in elem:
        walk_with_parent(child, elem)

root = ET.fromstring("")
walk_with_parent(root)

用 iterparse 遍历时缓存父栈(适合大文件)

处理超大 XML 时,iterparse 可边解析边处理,用栈模拟父子层级:

  • 遇到 start 事件时将当前元素压栈,此时栈顶下一个是其父节点
  • 遇到 end 事件时弹出,保持栈与实际嵌套深度一致
  • 内存友好,适合 GB 级 XML 流式处理

示例关键逻辑:

stack = []
for event, elem in ET.iterparse("file.xml", events=("start", "end")):
    if event == "start":
        if stack:
            parent = stack[-1]
            print(f"{elem.tag} 的父节点是 {parent.tag}")
        stack.append(elem)
    elif event == "end":
        stack.pop()

不推荐:给 ElementTree 打补丁加 parent 属性

有人尝试通过 elem.parent = parent 动态赋值来“修复”标准库,但存在风险:

  • 新创建的子元素(如用 SubElement)不会自动设 parent
  • 复制、深拷贝、XPath 查找结果等场景 parent 关系易丢失
  • 代码可维护性差,容易引发隐性 bug

除非有强约束不能引入第三方库,否则优先选 lxml 或递归传参方式。

本文地址:https://www.ufcn.cn/article/2107396.html

如非特殊说明,本站内容均来自于网友自主分享,概不代表本站观点,如有任何问题我们都将在收到反馈后的第一时间进行处理!

  • 王者荣耀张飞街头猛卫皮肤获取方法
    07月 11 2026

    王者张飞街头猛卫怎么获得,张飞街头猛卫是7月9日更新上线的足球潮流勇者皮肤,一共分三套获取方式,限时活动能免费拿,错过活动也能点券买或者碎片兑换,三种渠道门槛、时间节点完全不一样,下面挨个讲清楚操作步骤和注意事项,希望能够帮助到你。 王者张飞街头猛卫怎么获得 一、限时绿茵争锋活动(7.9-7.21,首选零氪免费领取) 活动入口在游戏首页弹窗,活动周期 13 天,累计攒满240 活动积分就能直接兑换...

  • 洛克王国世界S3赛季异色获取方法
    07月 11 2026

    洛克王国世界S3异色怎么获得,S3新赛季马上开,好多小洛克蹲限定异色,分不清奇遇刷蛋和代币兑换两条路子,经常白白浪费童话球、幻梦代币。我把赛季专属规则、兑换门槛、后期补异色途径分开讲,顺带说几个实测踩过的坑,不用瞎摸索。 洛克王国世界S3异色怎么获得 一、野外连续捕捉触发【精灵童话】奇遇,纯肝白嫖异色蛋 这是不用代币、零成本刷赛季异色的路子,核心机制就是连续抓精灵触发奇遇事件。 连续捕捉精灵的时候...

  • 原始传奇1.85复古元宝获取方法
    07月 11 2026

    原始传奇1.85复古元宝怎么获得,玩1.85复古服最缺的就是元宝,升转生、买材料、拍卖行收装备全要用到,好多新人只会蹲BOSS,效率低得离谱。我在复古服挂机、打宝、倒卖折腾挺久,把不用氪金、稳定刷元宝路子全捋一遍,分稳定保底、长线倒卖、限时活动三类,新手照着做不会走弯路。 原始传奇1.85复古元宝怎么获得 一、刷怪打 BOSS,最基础稳定元宝来源 这是所有人都能上手的路子,不用任何本钱,上线就能干...

  • 《模拟山羊3》蝴蝶翅膀获取攻略
    07月 11 2026

    模拟山羊3蝴蝶翅膀怎么获取?模拟山羊3支持玩家在游戏里自由探索,下面要带来模拟山羊3手机版蝴蝶翅膀怎么获得,蝴蝶翅膀在游戏里的正确名字叫仙子翅膀,作为游戏里比较特殊的道具,玩家必须要达成特定要求之后才能获取,下面会跟大家分享具体的获取方法,有需要的成员可以继续看下去,了解位置和获取要求。 《模拟山羊3》蝴蝶翅膀获取攻略 要想获取游戏里的仙子翅膀,玩家必须要先前往反乌托邦,玩家可以打开地图,在右上角...

  • 《精灵联萌》获取符石攻略
    07月 11 2026

    精灵联萌怎么获取符石?这就是一款热度比较高的放置卡牌游戏,对于精灵战斗力提升来说,关键的养成道具那就是符石,精灵联萌怎么获得符石?无论是推图闯关还是竞技,如果能够拥有高品质的符石都能够提升全队的暴击。可是大部分人都不知道产出的渠道在什么地方,这也导致自己白白错失良机,错过了很多稳定的资源。 《精灵联萌》获取符石攻略 核心就是自动推图加上离线挂机,这也是新手最先解锁的主要来源。进入到主线关卡之后,系...

  • 暗黑4S14升级符印获取攻略
    07月 11 2026

    暗黑破坏神 4 新赛季 S14 将于 7 月 1 日正式拉开帷幕,为玩家带来前所未有的游戏体验。还上线了许多内容,那么有不少小伙伴好奇S14赛季升级符印怎么获得,下面就来告诉大家S14升级符印获取攻略。 暗黑4S14升级符印获取攻略 获取方式 方式一:魔盒制作 具体流程 首先需要通过秘术师制作地下城符印。 将制作好的符印放入赫拉迪姆魔盒,选择物品塑形→融合→重塑。 获得升级符印 注意事项 刷图需要...

  • 《精灵联萌》神兽获取攻略
    07月 11 2026

    精灵联萌神兽怎么获取?玩这一个游戏的朋友,大家都会知道,神兽就是核心的战斗力,不管是推图闯关还是竞技场对战,拥有一只神兽,还有普通的英雄,就是两种不一样的体验。很多的玩家都在打听怎么样才能够获得神兽,今天就为大家来分享一下,靠野外抓怪是不可能实现的,来看一下应该怎么做。 《精灵联萌》神兽获取攻略 先来为大家分享一下出货率比较高的,那就是虚空扭蛋,这也是玩家可以拿到神兽的一种方法。扭蛋机还会有三个档...

  • 城池攻坚战资源获取方法
    07月 11 2026

    城池攻坚战资源怎么获得,玩这游戏最头疼的永远是资源不够用,升级建筑、征兵、养武将全要粮食、木材、铁矿、石料轮着砸。我断断续续玩了快一个月,试过各种攒资源的法子,踩了一堆乱花元宝、乱打地亏兵的坑,今天把所有能稳定拿资源的途径掰开说,平民不用硬氪也能慢慢囤起来。 城池攻坚战资源怎么获得 一、主城自产资源,躺平稳定收入,懒人必拉满 主城自带农场、伐木场、铁矿场、石料场,这是最不用操心的基础来源,离线挂着...

  • 斗罗大陆传承魂骨获取方法
    07月 11 2026

    斗罗大陆传承魂骨怎么获得,玩斗罗大陆传承这段时间,战力卡壳基本全卡在魂骨这套养成上。角色六个部位头骨、躯干、左右臂、左右腿,缺一块成套效果直接废掉,我刷了快两周副本、竞技场,踩过一堆乱分解、盲目堆单件的坑,今天把所有能稳定拿魂骨的渠道一次性说透,顺带讲清楚套装优先级。 斗罗大陆传承魂骨怎么获得 一、核心稳定来源:魂兽副本(高阶高掉落,必刷) 高品质万年魂骨最主要的产出地,没有之一。游戏里皇家猎场、...

  • 三国杀:一将成名SSS武将谋徐盛免费获取方法
    07月 11 2026

    三国杀一将成名谋徐盛如何免费获取,创玩节预约福利:免费送SSS谋徐盛!玩家们在7月2日~7月13日期间,参与预约活动集齐拼图,SSS武将谋徐盛免费抱回家。 三国杀:一将成名SSS武将谋徐盛免费获取方法: 一、免费送SSS谋徐盛 7月2日~7月13日期间,参与预约活动集齐拼图,SSS武将谋徐盛免费抱回家。 二、技能 体力:4  势力:吴 【勤强】 每回合每项限一次,你使用手牌时,可选择一项:1.令此...