python - 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>
三个问题:
<?xml version="1.0" encoding="utf-8"?>
失踪了。- 命名空间错误。
- 新
whitespace
元素的 消失了。
我看到了很多与这个主题相关的问题,其中大多数是建议其他包。有什么办法可以正确处理吗?
解决方案
处理指令不被视为 XML 元素。只是 Google正在处理 XML 的指令部分,第一个结果表明:
处理指令是标记,但它们不是元素。
由于您使用的包的字面意思是ElementTree
,因此您可以合理地期望它的对象是一棵元素树。如果我没记错的话,符合 DOM 的 XML 包可以支持 XML 中的非元素标记。
对于命名空间问题,答案是堆栈溢出,在从 XML 中删除 ns0 - 您只需注册您在文档顶部元素中指定的命名空间。以下对我有用:
ET.register_namespace("", "Buildtest")
至于空格 - 新元素没有任何空格。您可以分配给tail
成员以在元素后添加换行符。
推荐阅读
- javascript - 使用 SystemJS 时来自 unpkg 的 HTTP 404
- android - 为什么 Android Sunshine 示例使用 .replace 而不是 .add 进行 FragmentTransaction
- ios - UITableView 上未调用 LongPress 手势
- parsing - pyspark 删除和合并行
- go - 有没有办法在 Go 中省略导出的函数体?
- angular - 使用 ngTemplateOutlet 和 ng-template 自定义 Angular 树
- html - 在 HTML 的无序列表中使用列表样式类型的复选框
- docker - 如何为 Windows Docker 容器上的所有传出(和传入)流量分配特定 IP
- shell - Jupyter shell 赋值将变量传递给 !sed
- java - 列出数据库内容时出现休眠错误