【问题标题】:prevent ElementTree from adding namespaces to every element防止 ElementTree 向每个元素添加命名空间
【发布时间】:2017-08-01 09:10:43
【问题描述】:

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

在我的 XML 文件中,根和根下方的元素具有命名空间,但所有其他元素都没有。

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

是否有适当的方法告诉 ElementTree只将命名空间保留在它们最初出现的元素中

【问题讨论】:

  • this 是你想要的吗?看起来这是一个 hack,您在运行解析器之前使用正则表达式修改整个树。
  • 嗯...看起来像暴力破解。我不想一起删除命名空间,我想将它们保留在原始文件中出现的位置。
  • 未修改树也会发生这种情况吗? "我看到 ElementTree 在打印修改后的树时,会为每个元素添加命名空间。"
  • 是的。我还注意到,我的代码未更改的一些内部元素已删除其原始名称空间并替换为父子树的名称空间...
  • 正如我在stackoverflow.com/q/38663191/407651 中评论的那样,如果您可以使用 lxml (lxml.de) 代替 ElementTree,那么我认为这是一个解决方案。

标签: python xml elementtree


【解决方案1】:

试试这个:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-31
    • 2010-09-13
    • 2012-08-16
    • 1970-01-01
    • 2010-09-24
    • 2020-09-26
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多