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

使用Python的lxml库提取XML数据时输出顺序错误,寻求解决方法

解决lxml提取XML数据时重复输出的问题

你的问题出在代码逻辑上:每次遍历name元素时,都调用lxmltree.iter('country')和lxmltree.iter('rank')——这两个方法会遍历整个XML文档里的所有对应元素,所以每个name都会触发打印所有国家的所有rank值,导致重复输出。

正确的做法是:先遍历每个country节点,在每个节点内部先输出name,再输出该节点下的所有rank值,这样就能保证数据对应且有序。

修正后的代码如下:

from lxml import etree as lxmlET

lxmltree = lxmlET.parse('sample.xml')
# 遍历每个country节点
for country in lxmltree.xpath("/data/country"):
    # 获取当前country下的name文本并打印
    name = country.xpath('./name/text()')[0]
    print(name)
    # 遍历当前country下的所有rank节点并打印文本
    for rank in country.iter('rank'):
        print(rank.text)

这段代码的逻辑:

  1. 先定位到所有/data/country节点,逐个处理每个国家的数据
  2. 对每个国家节点,用相对路径./name/text()获取当前节点下的名称(避免全局查找)
  3. 再通过country.iter('rank')仅遍历当前国家节点下的所有rank元素,保证只输出该国家对应的rank值

运行后就能得到你需要的输出:

NAMEWSF
2
3
4
5
NAMEWSF2
6
7
8
9
NAMEWSF3
10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:15:34