Skip to main content
 首页 » 编程设计

python之使用 ElementTree 修改 XML

2025年05月04日15落叶无声

<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文件的正确方法吗?有什么更好的办法吗?或者在上面的代码中我还应该注意什么?

请您参考如下方法:

您的代码创建了一棵全新的树并将 Jay 添加到其中。您需要将 Jay 连接到现有树,而不是新树。

试试这个:

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") 

如果你想搜索一个特定的 child ,你可以这样做:

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() 方法。