使用ElementTree修改XML

nic*_*k01 1 python xml elementtree celementtree xml-parsing

<grandParent>
    <parent>
       <child>Sam/Astronaut</child>
    </parent>
</grandParent>
Run Code Online (Sandbox Code Playgroud)

我想通过在父标记内添加另一个子标记来修改上述XML.我正在做这样的事......

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

这是修改xml文件的正确方法吗?有更好的方法吗?或者我应该在上面的代码中处理什么?

Rob*_*obᵩ 6

您的代码会创建一个全新的树并将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")
Run Code Online (Sandbox Code Playgroud)

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

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")
Run Code Online (Sandbox Code Playgroud)

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