python - 使用 ElementTree 修改 XML

标签 python xml xml-parsing elementtree celementtree

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

关于python - 使用 ElementTree 修改 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25068629/

相关文章:

java - 没有时区信息的 XmlBeans XmlDateTime 格式

xml - 使用经典 ASP 获取节点属性的值

java - 从xml解析android资源

java - 如何通过流读取文件并同时流写入输出来更新 XML 文档

python - Django-slack 无法发送机器人消息

python - 如何在 Eclipse 中通过运行配置传递程序参数

Python 仅在文本文件中的某些位置执行操作

python - 如何在 Python 3 中打印异常?

java - 将 XML 文本节点替换为元素节点

python - 使用 lxml 解析时字符串在方括号处中断