如何使用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)
额外提示
- 如果你的XML中有多个
record元素需要处理,可以用findall("./record")遍历所有record节点,再逐个操作。 - 如果你希望输出的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
相关产品推荐
相关产品推荐

