You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用xml.etree.ElementTree为XML的record子元素添加子子元素

在XML的record子元素中添加子子元素的实现方案

嘿,我来帮你搞定这个XML修改的需求!先看看你提供的原始XML结构:

<Values version="2.0">
  <value name="system_type">osx</value>
  <record name="service">
    <value name="threads">1</value>
  </record>
</Values>

你的代码片段里用到了getchildren(),得提醒你一下:这个方法在Python 3.x里已经被弃用了,现在直接遍历根元素或者用list(values)就能获取子元素列表啦。下面是完整的实现步骤和代码:

步骤拆解

  • 解析XML文件并获取根节点
  • 定位到目标record元素(这里是name="service"的那个)
  • 创建你需要添加的子子元素(比如新的value元素)
  • 将新元素挂载到目标record下
  • 保存修改后的XML文件

完整代码示例

from xml.etree import ElementTree as ET

# 解析XML文件
tree = ET.parse('data.xml')
values = tree.getroot()

# 精准定位到name为"service"的record元素
service_record = values.find("./record[@name='service']")

# 创建新的子子元素(这里以添加一个name为"timeout"的value为例)
new_value = ET.Element("value", attrib={"name": "timeout"})
new_value.text = "30"  # 设置元素文本内容

# 将新元素添加到record下
service_record.append(new_value)

# 保存修改后的XML(xml_declaration=True会保留XML声明)
tree.write('modified_data.xml', encoding='utf-8', xml_declaration=True)

额外提示

  1. 如果你的XML中有多个record元素需要处理,可以用findall("./record")遍历所有record节点,再逐个操作。
  2. 如果你希望输出的XML保留缩进(更美观),可以借助xml.dom.minidom来格式化,示例代码如下:
import xml.dom.minidom

# 先按上面的步骤修改并获取XML字符串
xml_str = ET.tostring(values, encoding='utf-8')
dom = xml.dom.minidom.parseString(xml_str)
pretty_xml = dom.toprettyxml(indent="  ")

# 写入文件时修正声明并去掉多余空行
with open('pretty_modified_data.xml', 'w', encoding='utf-8') as f:
    f.write(pretty_xml.replace('<?xml version="1.0" ?>', '<?xml version="1.0" encoding="UTF-8"?>'))

内容的提问来源于stack exchange,提问作者thclpr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:05:12