Python中xml.etree.ElementTree无法找到XML元素属性的问题
问题根源
你用record.find(xml_field)查找的是XML元素的子元素,但你的XML里ncaaId、schoolSid这些目标数据都是<sa>/<parent>标签的属性(比如<sa ncaaId="211123456908"...>),所以find()永远返回None。
解决方案
把查找子元素的逻辑改成读取和修改XML属性的逻辑,具体修改如下:
修改核心代码块
替换原来的循环逻辑部分:
# Loop through the XML fields and update if necessary for xml_field, sql_column in xml_sql_mapping.items(): if sql_column in row_data: sql_value = row_data[sql_column] # 读取XML属性,而不是子元素 xml_attr_value = record.get(xml_field) print(f"The xml_field is {xml_field}.") print(f"XML attribute value is {xml_attr_value}") # 检查SQL值非空且与XML属性值不同 if sql_value is not None and xml_attr_value != str(sql_value): # 更新XML属性 record.set(xml_field, str(sql_value)) print(f"Updated {xml_field} from {xml_attr_value} to {sql_value}") elif xml_attr_value is None: print(f"XML attribute {xml_field} not found in the <{record.tag}> element.")
关键改动说明
- 读取属性:用
record.get(xml_field)替代record.find(xml_field),get()方法专门用于获取XML元素的属性值,不存在则返回None - 值对比:直接用属性值和SQL值对比,不需要访问
.text(因为属性本身就是字符串值) - 更新属性:用
record.set(xml_field, str(sql_value))来修改XML属性,注意要把SQL值转为字符串(XML属性都是字符串类型)
适配parent元素
这段修改对<parent>元素同样适用,因为parent的email、primaryPhone也是属性,逻辑完全一致。
验证效果
修改后运行,日志会打印出对应的属性值,当SQL值与XML属性值不同时,会自动更新XML的属性内容,不会再出现"XML element not found"的错误。
内容的提问来源于stack exchange,提问作者amackley
相关产品推荐
相关产品推荐

