如何使用Python在XML声明行之后添加注释
问题原因
xml.etree.ElementTree的结构里,根节点是整个XML树的顶层元素,你之前调用root.insert()是把注释插入到根节点的内部子节点列表里,所以注释会出现在<ScopeConfig>标签内部,达不到你要的效果。
解决方案
方案1:手动拆分写入流程(推荐,无需引入额外库)
不需要调整原有解析逻辑,只需要修改写入阶段的代码,按「XML声明→注释→根节点内容」的顺序手动写入即可,代码示例:
import xml.etree.ElementTree as ET def addCommentInXml(): fileXml ='C:\\Users\\Documents\\config.xml' tree = ET.parse(fileXml) root = tree.getroot() comment = ET.Comment('TEST') # 自定义写入逻辑 with open(fileXml, 'wb') as f: # 1. 写入XML声明 f.write(b"<?xml version='1.0' encoding='UTF-8'?>\n") # 2. 写入注释 f.write(ET.tostring(comment, encoding='UTF-8')) f.write(b"\n") # 3. 写入根节点及所有子节点内容 f.write(ET.tostring(root, encoding='UTF-8')) print("Done")
运行后输出的XML结构如下:
<?xml version='1.0' encoding='UTF-8'?> <!--TEST--> <ScopeConfig Checksum="5846AFCF4E5D02786"> <ExecutableName>STU</ExecutableName> <ZoomT2Encoder>-2230</ZoomT2Encoder> </ScopeConfig>
方案2:引入lxml库(适合复杂XML操作场景)
如果项目允许引入第三方依赖,lxml的ElementTree实现原生支持在根节点同级添加节点,操作更规范:
- 先安装依赖:
pip install lxml - 修改后代码:
from lxml import etree as ET def addCommentInXml(): fileXml ='C:\\Users\\Documents\\config.xml' tree = ET.parse(fileXml) root = tree.getroot() comment = ET.Comment('TEST') # 在根节点之前插入同级注释 root.addprevious(comment) tree.write(fileXml, encoding='UTF-8', xml_declaration=True, pretty_print=True) print("Done")
内容的提问来源于stack exchange,提问作者Sagar H
相关产品推荐
相关产品推荐

