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

如何处理XML解析器编码问题,解决&符号引发的XML解析报错?

问题原因

XML规范中&属于预定义的特殊字符,必须转义为&才属于合法语法,你的XML文件第62行直接使用了未转义的&,严格遵循XML规范的ElementTree解析时会直接抛出非法字符错误。

解决方案

方案1:修改XML源文件(最推荐)

直接把第62行的Blue & Logistics B.V.修改为Blue & Logistics B.V.即可,这是最符合XML规范的解决方式,不会带来其他潜在问题。
你也可以批量校验整个XML文件里的所有未转义特殊字符,除&外,<、>、"、'也属于XML预定义特殊字符,需要对应转义为&lt;、&gt;、&quot;、&apos;。

方案2:读取内容后预处理(无法修改源文件时使用)

如果没有权限修改XML源文件,可以在读取内容后、传入解析器之前,用正则匹配替换所有未转义的&,注意不能直接全局替换所有&,避免把原本已经正确转义的实体(比如&lt;)改错:

import xml.etree.ElementTree as ET
import io
import re

file_path = r'c:\data\MSM\Energy\XML-files\my_xml.xml' 

with io.open(file_path, 'r', encoding='utf-8-sig') as f:
    contents = f.read()
    # 仅替换未转义的&,不影响已存在的合法XML实体
    contents = re.sub(r'&(?!#?[a-zA-Z0-9]+;)', '&amp;', contents)
    tree = ET.fromstring(contents)

方案3:使用容错性更高的解析库

如果你的XML文件存在多处格式不规范问题,建议使用lxml库的XML解析器,开启恢复模式后可以自动修复这类简单的格式错误:
首先安装依赖:pip install lxml
然后修改代码如下:

from lxml import etree

file_path = r'c:\data\MSM\Energy\XML-files\my_xml.xml' 
# 开启自动修复模式
parser = etree.XMLParser(recover=True, encoding='utf-8-sig')
tree = etree.parse(file_path, parser=parser)

内容的提问来源于stack exchange,提问作者Al-Andalus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:07