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

如何用Python的xml.etree.ElementTree移除XML的encoding属性

解决ElementTree生成仅含<?xml version="1.0" ?>声明的XML问题

直接用xml.etree.ElementTree.tostring()确实没法直接生成不带encoding属性的XML声明,不过可以通过两种简单方式实现:

方法1:手动拼接声明与无声明XML内容

当指定encoding='unicode'参数时,tostring()会返回不含XML声明的Unicode字符串,之后手动拼接你需要的声明即可:

import xml.etree.ElementTree as ET

# 假设root是你的XML根节点
root = ET.Element("root")
child = ET.SubElement(root, "child")
child.text = "测试内容"

# 生成无声明的XML字符串
xml_body = ET.tostring(root, encoding='unicode', method='xml')
# 拼接目标声明
final_xml = '<?xml version="1.0" ?>\n' + xml_body

print(final_xml)

方法2:替换自动生成的声明

如果已经生成了带encoding='utf8'的声明,可以用字符串替换或正则表达式把encoding部分去掉:

import xml.etree.ElementTree as ET
import re

root = ET.Element("root")
# 生成带utf8编码声明的XML字节流,解码为字符串
raw_xml = ET.tostring(root, encoding='utf8', method='xml').decode('utf8')
# 替换声明为目标格式
final_xml = re.sub(r'^<\?xml version=\'1\.0\' encoding=\'utf8\'\?>', '<?xml version="1.0" ?>', raw_xml)

print(final_xml)

注意事项

  • 用encoding='unicode'时,返回的是字符串,不会处理编码声明,适合内容包含非ASCII字符的场景,能避免编码错误。
  • 正则替换要注意匹配原声明的引号格式(ElementTree默认用单引号),确保替换准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:25:30