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

Python 2.7 lxml etree iterfind传入变量语法问题求助

解决lxml etree中用变量索引遍历节点的问题

嘿,我来帮你搞定这个问题!首先提个小细节:你原来的XPath表达式./level1/level2/level3/[2]其实有点小问题——这里的/[2]是选取当前节点的第二个子节点,但你实际想选的应该是level2下的第2个level3节点,正确写法是./level1/level2/level3[2](去掉level3后面的斜杠)。

接下来回到你的需求:用变量i替换固定索引遍历所有对应节点,有两种常用方法:

方法一:字符串格式化构造带变量索引的XPath

XPath支持从1开始的位置索引,你可以通过字符串格式化把变量i插入到表达式中,逐个获取节点:

# 先获取所有匹配的level3节点,确定循环范围
all_level3_nodes = mytree.xpath('./level1/level2/level3')
# XPath索引从1开始,循环范围设为1到节点总数+1
for i in range(1, len(all_level3_nodes) + 1):
    # 构造带变量索引的XPath
    node = mytree.find('./level1/level2/level3[{}]'.format(i))
    if node is not None:
        print node.tag, node.text

这种方法适合你需要明确知道当前节点索引的场景,但要牢记XPath索引是从1开始的,和Python列表的0起始逻辑不同。

方法二:直接遍历所有匹配节点(更推荐)

其实lxml的iterfind方法本身就是用来遍历所有匹配节点的,完全不需要手动管理索引,代码更简洁高效:

# 直接遍历所有level3节点,自动处理所有实例
for y in mytree.iterfind('./level1/level2/level3'):
    print y.tag, y.text

这种方法省去了手动维护索引的麻烦,还能避免索引越界的问题,是处理这类遍历需求的最优解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:29:53