当前位置: 首页 > news >正文

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

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.jsqmd.com/news/42067/

相关文章:

  • 深入解析:Spring MVC 拦截器interceptor
  • HarmonyOS 5 鸿蒙Context上下文机制与资源管理详解 - 教程
  • 《重生之我成为世界顶级黑客》第八章:未来野望
  • 打开工作空间时,但未在 DTD/架构中声明
  • 开源软件的崛起:技术共享与协作创新的新时代 - 详解
  • 20232418 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • Claude Code教程:从零构建AutoPost GPT自动内容生成系统
  • MFC + OpenCV 图像预览显示不全中断问题解除:GDI行填充详解
  • python多进程 —— multiprocessing.Manager —— 跨主机共享内存的读写
  • AT_agc063_e Child to Parent 题解
  • 3天掌握OpenHarmony+Python开发:高效适配教程与真实项目案例精讲 - 教程
  • 飞牛os打开本机usb摄像头
  • CF 2156E Best Time to Buy and Sell Stock
  • 《重生之我成为世界顶级黑客》第七章:成功了,但没完全成功
  • 12306售票系统分析与实战
  • Java StringTokenizer 类 Scanner 类详解
  • Java 断言(Assert) 简介
  • 2025年中小学生 AI 学习机选购指南:松鼠 AI 双线模式成优选
  • 《重生之我成为世界顶级黑客》第六章:一线生机
  • 20232305 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 遥感建筑物变化检测内容集
  • 实用指南:IntelliJ IDEA 2023中为 Spring Boot 项目添加注释模板
  • 网络分析模型六
  • 【UE源码向】GameplayTag增加ToolTip
  • 基于c++ eigen的Nelder-Mead算法(仿照scipy)
  • 量化存储墙(三):GEMM EMA 下限解析解以及硬件静态资源分配设计
  • Docker - 配置镜像站解决下载镜像的网络问题
  • 2D3D-MATR论文学习
  • c# 获取当前时间
  • YOLOv3 深度解析:网络架构、核心改进与目标检测实践 - 指南