Python使用lxml解析XML文件时报加载外部实体失败错误如何解决
问题解决步骤
报错核心是etree.parse无法定位到指定的XML文件,和XML处理逻辑无关,按以下顺序排查即可:
- 确认文件路径匹配运行时工作目录
Python运行代码时的工作目录不一定等于代码文件存储目录,在代码开头加入以下代码校验:
若文件不存在,两种修复方案:import os # 打印当前Python运行的工作目录 print("当前工作目录:", os.getcwd()) # 校验目标文件是否在工作目录下存在 print("目标文件是否存在:", os.path.exists("AnyConv.com__CCSOPM Section 1_Master (1).xml"))- 将XML文件移动到打印出的工作目录中
- 拼接代码文件所在的绝对路径读取,避免工作目录变动影响:
import os from lxml import etree import numpy as np BASE_DIR = os.path.dirname(os.path.abspath(__file__)) xml_path = os.path.join(BASE_DIR, "AnyConv.com__CCSOPM Section 1_Master (1).xml") tree = etree.parse(xml_path) - 校验文件名准确性
Linux、macOS系统大小写敏感,需确认文件名的大小写、空格、括号、特殊符号完全匹配,比如文件后缀是否为.XML而非.xml,名称中的下划线、数字是否拼写正确。 - 确认文件读取权限
检查XML文件是否被其他软件锁定占用,或是当前运行Python的用户没有该文件的读取权限,可尝试复制文件到其他目录重新命名后测试。 - 特殊字符兼容处理
若路径包含中文、特殊符号导致lxml路径解析失败,可先手动读取文件内容再传入解析:with open(xml_path, 'r', encoding='utf-8') as f: xml_content = f.read() root = etree.fromstring(xml_content.encode('utf-8')) tree = etree.ElementTree(root)
内容的提问来源于stack exchange,提问作者Alberto Valdivia
相关产品推荐
相关产品推荐

