Python使用lxml解析XML文件查询指定数据报IndexError错误求助
问题解决方法
你代码报错和拿不到数据是三个核心问题导致的:
- XPath路径写法错误:开头带
/的XPath是全局根路径搜索,不会基于你当前循环的customer节点查找,要改成相对路径开头加. - 取值逻辑错误:
<despacho>是自闭合标签,没有内部文本,你要拿的是它的nome属性,不是text() - 没有做空值判断+过滤逻辑:直接取下标
[0]时如果XPath没匹配到结果就会触发IndexError,同时你没有加<nome>值匹配的过滤逻辑
修复后可运行代码
方案1:遍历节点判断(适合需要额外处理多匹配结果的场景)
from lxml import etree # 定义你要查找的目标nome值 TARGET_NAME = "NAME TO FIND" with open("XML-FILE.xml", 'rb') as f: file_content = f.read() tree = etree.fromstring(file_content) # 遍历所有processo节点 for processo in tree.xpath('//processo'): # 先拿当前processo下的marca/nome文本,加空判断 nome_list = processo.xpath('./marca/nome/text()') if not nome_list or nome_list[0] != TARGET_NAME: continue # 匹配到目标后,拿despacho的nome属性 despacho_list = processo.xpath('./despachos/despacho/@nome') if despacho_list: target_data = despacho_list[0] print(f"匹配到目标,对应的despacho的nome属性值为:{target_data}") # 只需要第一个匹配结果的话可以加break终止循环
方案2:单条XPath直接匹配(更高效)
from lxml import etree with open("XML-FILE.xml", 'rb') as f: file_content = f.read() tree = etree.fromstring(file_content) # 直接用XPath过滤条件一步拿到目标值 result = tree.xpath('//processo[./marca/nome/text()="NAME TO FIND"]/despachos/despacho/@nome') if result: print(result[0])
内容的提问来源于stack exchange,提问作者Paul Mark
相关产品推荐
相关产品推荐

