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
相关产品推荐
相关产品推荐

