You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python XML提取<f>标签数据遇空循环,求验证方法正确性

解决XML提取节点内容的问题

嘿,我一眼就看出问题所在了——你写的XPath路径不对!

先看你的XML结构:根节点就是<a>,里面包含<b>和多个<d>节点。而你用tree.iterfind('a/d/e/f')的时候,相当于告诉程序“从根节点开始找名为<a>的子节点,再往下找<d>/<e>/<f>”,但根节点本身就是<a>,它下面根本没有另一个<a>节点,自然找不到任何结果,循环也就空了。

给你几个正确的实现方法:

方法1:使用正确的相对路径(基于根节点)

先获取根节点,然后直接从根节点的子节点<d>开始查找:

import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()  # 获取根节点<a>
for elem in root.iterfind('d/e/f'):
    print(elem.tag, elem.text)  # 这里应该打印text而不是attrib,因为<f>节点的内容是文本值

方法2:递归查找所有节点(更灵活)

如果你的XML结构可能有变化,或者想直接找到所有层级的<f>节点,可以用'.//f'这种递归路径:

import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
for elem in tree.iterfind('.//f'):
    print(elem.tag, elem.text)

方法3:用iter()方法直接遍历指定标签

ElementTree还提供了更简洁的iter()方法,直接遍历所有指定标签的节点:

import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
for elem in root.iter('f'):
    print(elem.tag, elem.text)

你之前试的findall()没结果也是同样的原因——路径写错了,把路径改成'd/e/f'或者'.//f'就能正常拿到结果啦。

内容的提问来源于stack exchange,提问作者user997112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:54:49