Python 通过 xml ElementTree 添加新元素
Python add new element by 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 are processing instructions part of an XML,第一个结果是:
Processing instructions are markup, but they're not elements.
由于您使用的包字面上称为 ElementTree
,因此您可以合理地期望它的对象是元素树。如果我没记错的话,DOM compliant XML packages can support non-element markup in XML.
对于命名空间问题,答案在堆栈溢出中,位于 Remove ns0 from XML - 您只需注册您在文档顶部元素中指定的命名空间。以下对我有用:
ET.register_namespace("", "Buildtest")
至于空格 - 新元素没有任何空格。您可以分配给 tail
成员以在元素后添加换行符。
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 are processing instructions part of an XML,第一个结果是:
Processing instructions are markup, but they're not elements.
由于您使用的包字面上称为 ElementTree
,因此您可以合理地期望它的对象是元素树。如果我没记错的话,DOM compliant XML packages can support non-element markup in XML.
对于命名空间问题,答案在堆栈溢出中,位于 Remove ns0 from XML - 您只需注册您在文档顶部元素中指定的命名空间。以下对我有用:
ET.register_namespace("", "Buildtest")
至于空格 - 新元素没有任何空格。您可以分配给 tail
成员以在元素后添加换行符。