Python 阻止ElementTree向每个元素添加名称空间

Python 阻止ElementTree向每个元素添加名称空间,python,xml,elementtree,Python,Xml,Elementtree,我在Python中使用ElementTree解析xml文件,并在其中添加或删除元素 在我的XML文件中,根和根下面的元素有一个名称空间,但所有其他元素都没有 我看到ElementTree在打印修改后的树时,会向每个元素添加名称空间 有没有合适的方法告诉ElementTree将名称空间保留在它们最初出现的元素中 import xml.etree.ElementTree as ET namespaces = { '': 'http://tempuri.org/', '

我在Python中使用ElementTree解析xml文件,并在其中添加或删除元素

在我的XML文件中,根和根下面的元素有一个名称空间,但所有其他元素都没有

我看到ElementTree在打印修改后的树时,会向每个元素添加名称空间

有没有合适的方法告诉ElementTree将名称空间保留在它们最初出现的元素中

import xml.etree.ElementTree as ET
namespaces = {
    '':         'http://tempuri.org/',
    'soap':     'http://schemas.xmlsoap.org/soap/envelope/',
    'xsi':      'http://www.w3.org/2001/XMLSchema-instance',
    'xsd':      'http://www.w3.org/2001/XMLSchema',
}
for prefix, uri in namespaces.items():
    ET.register_namespace(prefix, uri)

你要的是什么?看起来这是一个黑客,在运行解析器之前用正则表达式修改整个树。嗯。。。看起来像一个暴力黑客。我不想一起删除名称空间,我想将它们保留在原始文件中显示的位置。未修改的树也会这样吗?“我看到ElementTree在打印修改后的树时,会向每个元素添加名称空间。”是的。我还注意到,一些未被我的代码更改的内部元素将其原始名称空间删除,并替换为父子树的名称空间……正如我在中所评论的,如果您可以使用lxml()而不是ElementTree,那么我认为这是一个解决方案。