当前位置: 首页 > 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.zskr.cn/news/51436.html

相关文章:

  • 开源软件的崛起:技术共享与协作创新的新时代 - 详解
  • AT_agc063_e Child to Parent 题解
  • 这里是 NoInt_Young 的博客
  • CF 2156E Best Time to Buy and Sell Stock
  • 《重生之我成为世界顶级黑客》第七章:成功了,但没完全成功
  • 实用指南:Open Inventor 2025.2 FOR JAVA
  • 2025年中小学生 AI 学习机选购指南:松鼠 AI 双线模式成优选
  • 20232305 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 网络分析模型六
  • Docker - 配置镜像站解决下载镜像的网络问题
  • Linux问题
  • 20232424 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 【C++STL :stack queue (二) 】stack 与 queue 的模拟实现与双端队列探秘 - 指南
  • 《重生之我成为世界顶级黑客》第五章:失败,失败,还是失败
  • 利用单片机的TIM模块播放春日影
  • warp-cli代理
  • 20231427田泽航tlcp协议验证
  • 20232412 2024-2025-1 《网络与系统攻防技术》实验五实验报告
  • 本地缓存Caffeien
  • 实用指南:C++---嵌套类型(Nested Types)封装与泛型的基石
  • python: 用pyppeteer以无头方式抓取页面
  • python共享内存的读写同步与加锁 —— multiprocessing.Value和multiprocessing.Array、加锁
  • 2025年11月温州律师事务所最新推荐,聚焦资质、案例、服务的五家机构深度解读!
  • UI设计公司审美积累|办公类软件界面设计巧思,效率与视觉的双重升级
  • 详细介绍:AVL树手撕,超详细图文详解
  • 网络安全
  • Zhengrui 11.16 总结
  • C# 高级类型 dynamic,list,泛型(学习笔记5)
  • 构建AI智能体:六十九、Bootstrap采样在大模型评估中的应用:从置信区间到模型稳定性 - 指南
  • pip安装或查看工具包时显示WARNING: Ignoring invalid distribution -XX的解决办法