Python解析XML文件数据报错及格式输出问题求助
解决XML解析的KeyError和格式输出问题
我来帮你搞定这两个问题!咱们一步步拆解问题和解决方案:
1. 解决KeyError: 'color'的问题
你遇到的错误根源很明确:in_shipping和in_production标签里的color、place是子元素,不是标签自身的属性(attrib),而stock标签的color、place才是属性。所以代码里不能统一用j.attrib来获取值,得先判断当前处理的是哪种标签,分开处理:
- 对于
in_shipping和in_production:需要通过子元素查找来获取color和place的文本值 - 对于
stock:直接通过attrib字典获取color、place属性,再获取标签内的库存数值
2. 实现一行格式输出
不要在循环里每次都print,那样会导致内容分散换行。我们可以把所有需要输出的内容收集到一个列表里,最后用空格把列表元素拼接成完整的字符串,一次性输出。
修改后的完整代码
import xml.etree.ElementTree as ET def data(): tree = ET.parse('stack.xml') root = tree.getroot() output = [] # 用来统一收集所有要输出的数据 for car in root: for elem in car: if elem.tag in ('in_shipping', 'in_production'): # 处理带color/place子元素的标签 color = elem.find('color').text place = elem.find('place').text output.extend([color, place]) elif elem.tag == 'stock': # 处理带color/place属性的标签 color = elem.attrib['color'] place = elem.attrib['place'] count = elem.text.strip() # 去掉可能的空白字符 output.extend([color, place, count]) # 把列表元素用空格拼接成一行输出 print(' '.join(output)) data()
运行结果
执行这段代码后,控制台会输出你期望的格式内容:
red 4 blue 2 red 1 4 green 2 1 blue 3 6 purple 4 7 silver 2 black 1 green 2 1 red 1 4 blue 3 6
内容的提问来源于stack exchange,提问作者riram




