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

如何用Python的xml.etree.ElementTree覆盖XML文件中的空编码值?

解决XML声明编码为空导致的解析错误

你的问题核心是XML声明里的encoding=""不符合XML语法规范,所以即使指定XMLParser的编码也没用——解析器在读取编码参数前就会因为无效的XML声明报错。以下是两种可行的解决方法:

方法一:预处理文件内容,修复XML声明

先手动读取文件内容,把空的encoding替换成有效的编码值(比如UTF-8),再用fromstring解析:

import xml.etree.ElementTree as et

file_name = "your_file.xml"
# 读取文件内容
with open(file_name, "r", encoding="utf-8") as f:
    content = f.read()
# 替换空的encoding属性
fixed_content = content.replace('encoding=""', 'encoding="UTF-8"')
# 解析修复后的内容
root = et.fromstring(fixed_content)
# 验证结果
print(root.find("Field1").text)  # 输出7933

方法二:使用xml.sax解析器绕过XML声明检查

如果不想修改文件内容,可以用xml.sax的解析器,它对不规范的XML声明容忍度更高,再转换为ElementTree的元素:

import xml.etree.ElementTree as et
from xml.sax import make_parser
from xml.sax.handler import ContentHandler

class SaxToElement(ContentHandler):
    def __init__(self):
        self.root = None
        self.current_element = None
        self.element_stack = []

    def startElement(self, name, attrs):
        elem = et.Element(name, attrs)
        if self.root is None:
            self.root = elem
        if self.current_element is not None:
            self.current_element.append(elem)
        self.element_stack.append(elem)
        self.current_element = elem

    def endElement(self, name):
        self.element_stack.pop()
        self.current_element = self.element_stack[-1] if self.element_stack else None

    def characters(self, content):
        if content.strip():
            if self.current_element.text is None:
                self.current_element.text = content.strip()

# 初始化SAX解析器
parser = make_parser()
handler = SaxToElement()
parser.setContentHandler(handler)

# 解析文件
with open(file_name, "r", encoding="utf-8") as f:
    parser.parse(f)

# 获取根元素
root = handler.root
print(root.find("Field3").text)  # 输出Montana

补充说明

  • xml.etree.ElementTree的默认解析器对XML语法的严格性要求较高,这种空encoding的声明属于无效语法,所以会直接报错。
  • 预处理文件的方法更简单直接,适合大多数场景;SAX解析的方法适合无法修改原文件的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:07:19