如何用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
相关产品推荐
相关产品推荐

