xml.etree.ElementTree 完全支持嵌套查找子元素,且有多种简洁实用的方式。

news/2025/11/16 19:52:05/文章来源:https://www.cnblogs.com/zhangdingqu/p/19228806

xml.etree.ElementTree 完全支持嵌套查找子元素,且有多种简洁实用的方式。

核心实现方式

1. XPath 路径直接嵌套查找(最常用)

通过 / 分隔层级,直接定位深层子元素,支持精确匹配标签名、属性等。

import xml.etree.ElementTree as ET# 解析XML
tree = ET.parse("your_xml.xml")
root = tree.getroot()# 嵌套查找:root → parent → child(直接通过XPath路径)
# 示例:查找root下所有parent标签下的child标签
child_elements = root.findall("parent/child")# 带属性条件的嵌套查找(如查找child中resource-id为指定值的元素)
target_elements = root.findall("parent/child[@resource-id='com.xingin.xhs:id/0_resource_name_obfuscated']")

2. 链式调用逐层查找(适合层级固定场景)

先找到父元素,再从父元素中查找子元素,逐层深入。

# 第一步:找到父元素
parent_element = root.find("parent")
if parent_element:# 第二步:从父元素中查找子元素(嵌套查找)child_element = parent_element.find("child")# 继续嵌套:从child中找孙子元素grandchild_element = child_element.find("grandchild") if child_element else None

3. 递归遍历所有嵌套子元素(适合未知层级)

使用 iter() 方法递归遍历当前元素下所有后代元素,无需关注具体嵌套深度。

# 遍历root下所有嵌套的child标签(无论嵌套多少层)
for child in root.iter("child"):# 处理找到的子元素print(child.attrib.get("resource-id"))

实用场景示例(结合你之前的小红书 XML 元素)

假设 XML 结构如下:

<root><card><text resource-id="com.xingin.xhs:id/0_resource_name_obfuscated">汤圆</text></card><card><text resource-id="com.xingin.xhs:id/0_resource_name_obfuscated">丘卡的小袜子</text></card>
</root>

嵌套查找所有卡片下的文本元素:

tree = ET.parse("xhs_elements.xml")
root = tree.getroot()# 嵌套查找:card标签下的text标签,且resource-id匹配
text_elements = root.findall("card/text[@resource-id='com.xingin.xhs:id/0_resource_name_obfuscated']")
for elem in text_elements:print(elem.text)  # 输出:汤圆、丘卡的小袜子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/967302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析:Spring MVC 拦截器interceptor

深入解析:Spring MVC 拦截器interceptorpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

HarmonyOS 5 鸿蒙Context上下文机制与资源管理详解 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

《重生之我成为世界顶级黑客》第八章:未来野望

《重生之我成为世界顶级黑客》第八章:未来野望词穷,暂时没灵感了。龙傲天盯着桌上那个用40积分换来的企鹅玩偶,嘴角泛起一丝苦涩的笑意。这次的经历像一盆冷水,浇醒了他这些天因微小进步而产生的自满。企业的安全防…

打开工作空间时,但未在 DTD/架构中声明

OpenFromFile时,如果路径不存在或者不合法, 将报错,请先检查路径! {"未指定的错误\r\n\r\n使用了元素 {http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes}Text,但未在 DTD/架构中…

开源软件的崛起:技术共享与协作创新的新时代 - 详解

开源软件的崛起:技术共享与协作创新的新时代 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

从 LLM 到 Agentic AI:构建下一代智能平台的全栈路径

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

11.16组会

R语言 应用:统计分析、绘图功能、扩展生态 列表、数组、矩阵、数据框 平均值、最大最小、中位数等 作各种图,质量好

20232418 2025-2026-1 《网络与系统攻防技术》实验五实验报告

20232418 2025-2026-1 《网络与系统攻防技术》实验五实验报告 1.实验内容 1.1通过whois、dig、nslookup等命令查询DNS域名、IP地址的详细信息。 1.2通过资源监视器和在线工具得到IP地址并确定其地理位置。 1.3nmap开源…

Claude Code教程:从零构建AutoPost GPT自动内容生成系统

Claude Code教程:从零构建AutoPost GPT自动内容生成系统AutoPost GPT是一个非常适合Claude Code 的全流程实战项目,它涵盖了从架构设计到模块拆分、从 API 调用到任务调度、从内容生成到自动发布的完整工程链路。如果…

MFC + OpenCV 图像预览显示不全中断问题解除:GDI行填充详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写

python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写示例代码:点击查看代码 import multiprocessingdef f(ns):ns.x.append(…

AT_agc063_e Child to Parent 题解

AT_agc063_e Child to Parent 题解 设 \(c_x\) 表示点 \(x\) 一共执行的操作次数,对于不同的 \(c_x\) 序列最终的 \(A\) 序列是不同的,因此我们对 \(c_x\) 序列计数即可。 容易发现一个 \(c_x\) 合法的充要是 \(0\le…

详细介绍:UVa 11129 An Antiarithmetic Permutation

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

3天掌握OpenHarmony+Python开发:高效适配教程与真实项目案例精讲 - 教程

3天掌握OpenHarmony+Python开发:高效适配教程与真实项目案例精讲 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

飞牛os打开本机usb摄像头

飞牛os打开本机usb摄像头笔记本安装了飞牛os,想打开本机的USB摄像头,参考文章——Linux运维笔记[15]-网页ip摄像头 我用的是第一种办法,有些命令需要修改: 1、安装go并配置环境wget -O go_install.sh https://go.g…

CF 2156E Best Time to Buy and Sell Stock

vp 这场 E, F1 都写爆了被一起逮捕,我是人?直接求解答案似乎并不容易,因为需要考虑的大小关系太多了,于是可以尝试二分转为 01 问题。 于是尝试思考,如何判断答案是否 \(\ge w\)。 这个问题并不具有一些特殊的结构…

《重生之我成为世界顶级黑客》第七章:成功了,但没完全成功

《重生之我成为世界顶级黑客》第七章:成功了,但没完全成功继续肝,还剩一丢丢灵感。第二天清晨,龙傲天是被急促的手机铃声吵醒的。他迷迷糊糊地摸过手机,看到屏幕上显示着一个陌生的号码。出于习惯,他先是检查了一…

12306售票系统分析与实战

1. 内容介绍 MVP:Minimum Viable Product 最简化实行产品 核心功能:实体管理 生成座位 放票 查询余额 抢票 生成订单 ...核心内容:需求设计 数据库设计 项目搭建 流行的设计思想 后台管理实现 前台查余票及购买 组件…

Java StringTokenizer 类 Scanner 类详解

Java StringTokenizer 类介绍 概述 StringTokenizer 是一个遗留类,用于将字符串分割成标记(tokens)。 但在现代 Java 开发中已被更强大的 String.split() 和 Scanner 类取代,新项目应使用更现代的解决方案。 基本用…