如何使用Python的minidom库向XML文件中新增节点?
如何给XML添加新的Constant节点?
现有XML结构
<?xml version="1.0"?> <Constants> <Constant> <Name>Packers_F</Name> <Value>3</Value> </Constant> <Constant> <Name>Bumpstop_F</Name> <Value>30</Value> </Constant> </Constants>
要添加的节点
<Constant> <Name>MYNEWNAME</Name> <Value>1234</Value> </Constant>
已实现的读取脚本
document = parse(xml_file.name) contants = document.getElementsByTagName("Constant") for constant in contants: temp_name = constant.getElementsByTagName('Name')[0] temp_value = constant.getElementsByTagName('Value')[0] print(getNodeText(temp_name),':',getNodeText(temp_value))
新增节点的实现方案
基于你使用的xml.dom.minidom库,按以下步骤完成节点新增:
- 找到
<Constants>根节点,作为新节点的父容器 - 依次创建
<Constant>、<Name>、<Value>元素节点 - 给
<Name>和<Value>添加对应的文本内容 - 按层级组装节点,最后写入XML文件
完整代码示例
from xml.dom.minidom import parse # 补充你用到的getNodeText函数(未定义的话需添加) def getNodeText(node): return node.firstChild.nodeValue # 读取XML文件 xml_file_path = "your_file.xml" # 替换为你的实际文件路径 document = parse(xml_file_path) # 获取根节点<Constants> constants_root = document.getElementsByTagName("Constants")[0] # 创建新的<Constant>节点 new_constant = document.createElement("Constant") # 创建<Name>节点并设置文本 name_node = document.createElement("Name") name_text = document.createTextNode("MYNEWNAME") name_node.appendChild(name_text) # 创建<Value>节点并设置文本 value_node = document.createElement("Value") value_text = document.createTextNode("1234") value_node.appendChild(value_text) # 组装节点层级 new_constant.appendChild(name_node) new_constant.appendChild(value_node) constants_root.appendChild(new_constant) # 保存修改后的XML文件 with open(xml_file_path, "w", encoding="utf-8") as f: document.writexml(f, indent="", addindent=" ", newl="\n", encoding="utf-8") # 验证结果:打印所有节点 contants = document.getElementsByTagName("Constant") for constant in contants: temp_name = constant.getElementsByTagName('Name')[0] temp_value = constant.getElementsByTagName('Value')[0] print(getNodeText(temp_name), ':', getNodeText(temp_value))
关键说明
- 用
createElement创建元素节点,createTextNode创建文本内容节点 - 通过
appendChild维护节点层级,需从最内层文本节点开始组装 writexml的参数可控制XML输出格式,让内容更易读
内容的提问来源于stack exchange,提问作者Dario Armellin
相关产品推荐
相关产品推荐

