如何用Python提取XML中多个同名pineapple标签的属性值
问题原因
- 存储数据的
data字典定义在循环外层,每次遍历entity节点都会覆盖pineapple字段的值,最终只会保留最后一个节点的取值,这是返回结果重复的核心原因 - 代码存在多处语法错误:
- XPath属性匹配语法错误,属性匹配使用等号而非冒号,
[@name:'pineapple']需改为[@name='pineapple'] - 字符串、引号存在多处未闭合的问题
- 字典初始化语法错误,键值对使用冒号分隔而非等号,入参与内部使用的变量名不统一
- 内层循环已遍历到目标
attribute节点,无需重复调用find查找
- XPath属性匹配语法错误,属性匹配使用等号而非冒号,
- 最终返回仅包含单个
data对象的列表,无法输出多个结果
修正后的代码
import xml.etree.ElementTree as ET def extract_pineapple(self, cd, cs, root): # 定义结果列表存储所有entity对应的数据 result = [] for c in root.findall("./csData/entity[@type='a']"): # 每个entity单独生成一个data字典 data = {'cd_id': cd, 'cs_id': cs} # 查找当前entity下的pineapple属性 attr = c.find("./attribute[@name='pineapple']") if attr is not None: data['pineapple'] = attr.get('value') result.append(data) return result
补充说明
你提供的XML示例存在标签未闭合的问题,两个<entity>标签都缺少对应的</entity>闭合标签,运行前需要先修正为合法XML结构。如果不需要保留cd_id和cs_id的结构,仅需要提取所有pineapple的value值,可以直接将取值添加到列表返回即可。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

