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

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.")

关键改动说明

  1. 读取属性:用record.get(xml_field)替代record.find(xml_field),get()方法专门用于获取XML元素的属性值,不存在则返回None
  2. 值对比:直接用属性值和SQL值对比,不需要访问.text(因为属性本身就是字符串值)
  3. 更新属性:用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:37:10