首页 > 解决方案 > Python通过xml ElementTree添加新元素

问题描述

XML 文件

<?xml version="1.0" encoding="utf-8"?>
<Info xmlns="BuildTest">
<RequestDate>5/4/2020 12:27:46 AM</RequestDate>
</Info>

我想在Info标签内添加一个新元素。

这就是我所做的。

import xml.etree.ElementTree as ET

tree = ET.parse('example.xml')
root = tree.getroot()
ele = ET.Element('element1')
ele.text = 'ele1'
root.append(ele)
tree.write("output.xhtml")

输出

<ns0:Info xmlns:ns0="BuildTest">
<ns0:RequestDate>5/4/2020 12:27:46 AM</ns0:RequestDate>
<element1>ele1</element1></ns0:Info>

三个问题:

  1. <?xml version="1.0" encoding="utf-8"?>失踪了。
  2. 命名空间错误。
  3. whitespace元素的 消失了。

我看到了很多与这个主题相关的问题,其中大多数是建议其他包。有什么办法可以正确处理吗?

标签: pythonxmlelementtree

解决方案


处理指令不被视为 XML 元素。只是 Google正在处理 XML 的指令部分,第一个结果表明:

处理指令是标记,但它们不是元素。

由于您使用的包的字面意思是ElementTree,因此您可以合理地期望它的对象是一棵元素树。如果我没记错的话,符合 DOM 的 XML 包可以支持 XML 中的非元素标记。

对于命名空间问题,答案是堆栈溢出,在从 XML 中删除 ns0 - 您只需注册您在文档顶部元素中指定的命名空间。以下对我有用:

ET.register_namespace("", "Buildtest")

至于空格 - 新元素没有任何空格。您可以分配给tail成员以在元素后添加换行符。


推荐阅读