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

Python ElementTree解析XML报not well-formed无效令牌错误求助

错误根因

ET.fromstring() 方法的作用是直接解析传入的字符串为XML结构,它不会自动读取路径对应的文件内容。你代码里把文件路径字符串(比如blogs/1000331.female.37.indUnk.Leo.xml)直接传给了这个方法,解析器会把路径字符串本身当成XML内容校验:合法XML的开头必须是<(标签起始)或<?(XML声明),而你传入的字符串开头是普通字符b,解析到第5列时就判定不符合XML语法,抛出格式错误。
另外你给解析器设置的encoding="unicode_escape"属于错误配置,该编码仅用于处理转义格式的Unicode字符串,不适合常规XML文件解析。

修复代码

直接用ET.parse()方法传入文件路径即可,这个方法会自动读取、解析路径对应的XML文件:

from xml.etree import ElementTree as ET
from os import path, listdir

path__ = "blogs/"
files = [path.join(path__, f) for f in listdir(path__) if f.endswith('.xml')]
for file in files:
    print(file)
    tree = ET.parse(file)
    root = tree.getroot()
    # 在此处添加你的XML节点处理逻辑
兼容特殊编码文件的方案

如果个别文件存在编码不规范导致解析报错,可以手动指定编码读取文件内容后再解析:

from xml.etree import ElementTree as ET
from os import path, listdir

path__ = "blogs/"
files = [path.join(path__, f) for f in listdir(path__) if f.endswith('.xml')]
for file in files:
    print(file)
    # 可根据文件实际编码修改encoding参数,errors='ignore'会跳过无法解码的异常字符
    with open(file, 'r', encoding='utf-8', errors='ignore') as f:
        xml_content = f.read()
    root = ET.fromstring(xml_content)
    # 在此处添加你的XML节点处理逻辑

提示:批量解析第三方来源的XML文件时,建议增加异常捕获逻辑,避免单个损坏文件中断整个批量处理流程。

内容的提问来源于stack exchange,提问作者skeeper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:48:19