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

Python新手求助:使用ElementTree修改XML文件的方法

解决你的XML修改需求

嘿,作为Python新手能走到ElementTree解析这一步已经很棒啦!我来一步步帮你完成剩下的修改:

1. 先处理注释的保留(关键!)

默认情况下xml.etree.ElementTree不会解析XML里的注释,所以如果想删除第一行的注释,得先创建一个能保留注释的解析器:

import xml.etree.ElementTree as ET

# 创建保留注释的解析器
parser = ET.XMLParser(target=ET.TreeBuilder(insert_comments=True))
tree = ET.parse('Document.xml', parser=parser)
root = tree.getroot()

2. 删除前两行内容

看你的示例,前两行分别是注释和<spirit:vendor>标签,所以我们要从root的子元素里移除这两个:

# 先移除第一个子元素(注释)
if root[0].tag is ET.Comment:
    root.remove(root[0])

# 再移除剩下的第一个子元素(vendor标签)
if root[0].tag == 'spirit:vendor':
    root.remove(root[0])

3. 移除所有标签的"spirit:"前缀

遍历所有元素,把每个元素的tag里的spirit:前缀去掉。这里用递归遍历,确保嵌套元素也能处理(如果有的话):

def remove_spirit_prefix(element):
    # 修改当前元素的tag
    if element.tag.startswith('spirit:'):
        element.tag = element.tag.replace('spirit:', '')
    # 递归处理子元素
    for child in element:
        remove_spirit_prefix(child)

# 调用函数处理根元素下的所有元素
remove_spirit_prefix(root)

4. 生成修改后的XML文件

最后把修改后的树写入新文件:

tree.write('Modified_Document.xml', encoding='utf-8', xml_declaration=True)

完整代码

把上面的步骤整合起来就是完整的代码啦:

import xml.etree.ElementTree as ET

# 保留注释的解析器
parser = ET.XMLParser(target=ET.TreeBuilder(insert_comments=True))
tree = ET.parse('Document.xml', parser=parser)
root = tree.getroot()

# 删除前两个元素(注释和vendor)
if root[0].tag is ET.Comment:
    root.remove(root[0])
if root[0].tag == 'spirit:vendor':
    root.remove(root[0])

# 移除所有标签的spirit前缀
def remove_spirit_prefix(element):
    if element.tag.startswith('spirit:'):
        element.tag = element.tag.replace('spirit:', '')
    for child in element:
        remove_spirit_prefix(child)

remove_spirit_prefix(root)

# 保存修改后的XML
tree.write('Modified_Document.xml', encoding='utf-8', xml_declaration=True)

测试一下你的示例输入,运行后就能得到你想要的输出啦!如果你的XML里有嵌套的spirit:标签,递归处理也能搞定~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:07:51