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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:39:01