修改使用ElementTree的一个XML(Modify a XML using ElementTr

2019-10-20 14:02发布

<grandParent>
    <parent>
       <child>Sam/Astronaut</child>
    </parent>
</grandParent>

我希望通过添加父标签内的另一个子标签修改上面的XML。 我做这样的事情..

tree = ET.parse("test.xml")
a=ET.Element('parent')
b=ET.SubElement(a,"child")
b.text="Jay/Doctor"
tree.write("test.xml")

这是修改XML文件的正确方法是什么? 什么更好的办法? 或者还有什么我应该照顾在上面的代码?

Answer 1:

你的代码创建了一个全新的树,并增加了周杰伦吧。 您需要周杰伦连接到现有的树,而不是一个新的。

尝试这个:

import xml.etree.ElementTree as ET

tree = ET.parse("test.xml")
a = tree.find('parent')          # Get parent node from EXISTING tree
b = ET.SubElement(a,"child")
b.text = "Jay/Doctor"
tree.write("test.xml")

如果你要搜索一个特定的孩子,你可以这样做:

import xml.etree.ElementTree as ET
tree = ET.parse("test.xml")
a = tree.find('parent')
for b in a.findall('child'):
    if b.text.strip() == 'Jay/Doctor':
        break
else:
    ET.SubElement(a,"child").text="Jay/Doctor"
tree.write("test.xml")

通知a.findall()类似a.find()但返回所有的命名元素)。 xml.etree具有非常有限的搜索条件。 您可以考虑使用lxml.etree及其.xpath()方法。



文章来源: Modify a XML using ElementTree