使用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)
这段代码的逻辑:
- 先定位到所有
/data/country节点,逐个处理每个国家的数据 - 对每个国家节点,用相对路径
./name/text()获取当前节点下的名称(避免全局查找) - 再通过
country.iter('rank')仅遍历当前国家节点下的所有rank元素,保证只输出该国家对应的rank值
运行后就能得到你需要的输出:
NAMEWSF 2 3 4 5 NAMEWSF2 6 7 8 9 NAMEWSF3 10
内容的提问来源于stack exchange,提问作者Elliobu
相关产品推荐
相关产品推荐

