ElementTree将替换那些未注册到的命名空间前缀
ET.register_namespace
. 要保留名称空间前缀,需要先注册它,然后再将修改写入文件。以下方法执行此任务并全局注册所有名称空间,
def register_all_namespaces(filename):
namespaces = dict([node for _, node in ET.iterparse(filename, events=['start-ns'])])
for ns in namespaces:
ET.register_namespace(ns, namespaces[ns])
此方法应在之前调用
ET.parse
方法,以便名称空间保持不变,
import xml.etree.ElementTree as ET
register_all_namespaces('filename.xml')
tree = ET.parse('filename.xml')
# XML modification here
# save the modifications
tree.write('filename.xml')