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

Python移除XML节点遇索引越界,求按属性值删除方法

按属性移除XML节点的Python实现

原索引删除方案报错原因

直接通过索引删除节点时,getElementsByTagName()返回的是实时NodeList——每删除一个节点,列表长度就会缩短,后续再用原索引访问自然会触发IndexError。

按属性删除的实现方案

要移除所有severity属性为NotApplicable的Message节点,可按以下步骤操作:

  1. 解析XML文件,获取所有Message节点
  2. 将NodeList转为普通列表(避免遍历过程中因节点删除导致的遍历异常)
  3. 遍历每个节点,检查severity属性值
  4. 匹配目标属性的节点,调用parentNode.removeChild()删除
  5. 保存修改后的XML内容

完整代码示例:

from xml.dom import minidom

# 解析XML文件
xmldoc = minidom.parse("your_file.xml")
# 获取所有Message节点并转为列表
message_nodes = list(xmldoc.getElementsByTagName("Message"))

# 遍历节点,删除符合条件的项
for node in message_nodes:
    # 获取severity属性值,不存在则返回None
    severity = node.getAttribute("severity")
    if severity == "NotApplicable":
        node.parentNode.removeChild(node)

# 保存修改后的XML
with open("modified_file.xml", "w", encoding="utf-8") as f:
    # toprettyxml用于格式化输出,indent参数控制缩进
    f.write(xmldoc.toprettyxml(indent="  ", encoding="utf-8").decode("utf-8"))

测试XML示例

<listMessage>
<Message msgID="00002" severity="High">
    <msg>00002</msg>
</Message>
<Message msgID="00001" severity="NotApplicable">
<msg> NA</msg>
</Message>
</listMessage>

执行代码后,modified_file.xml中将只保留severity="High"的Message节点。

内容的提问来源于stack exchange,提问作者Israa El-Sakka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:15:43