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

使用xml.etree.ElementTree提取XML指定字段值失败求助

问题原因及修复方案

核心问题分析

你的代码存在两个关键逻辑错误,导致无法正确提取resource-usage-address和resource-usage-usage:

1. 循环逻辑冗余且易出错

你用root.findall(".//resource-usage-entry/*")获取了所有resource-usage-entry的子元素,接着又用elem.iter()遍历这些子元素的后代节点。对于resource-usage-address、resource-usage-usage这类叶子节点,elem.iter()会返回元素节点本身和其文本节点(tag为#text)。这种冗余遍历不仅没必要,还可能因为文本节点的干扰,导致后续的append操作未被正确触发。

2. 变量名笔误

代码第一行解析XML得到的根节点是root2,但循环中使用的是root.findall(...)。如果root未指向正确的XML根,会导致部分节点无法被匹配到(不过你的rpn有值,说明实际代码中可能是粘贴时的笔误,但这是潜在问题)。

修复后的代码

直接遍历每个resource-usage-entry节点,然后在每个节点内精准查找目标标签,逻辑更清晰且不易出错:

import xml.etree.ElementTree as ET

# 假设output3是你的XML字符串
root2 = ET.fromstring(output3)

# 初始化存储数组
rpn = []
rua = []
ruu = []
target_tags = ['resource-usage-pool-name','resource-usage-address','resource-usage-usage']

# 遍历所有resource-usage-entry节点
for entry in root2.findall(".//resource-usage-entry"):
    for tag in target_tags:
        # 在当前entry中查找目标标签
        node = entry.find(tag)
        if node is not None:
            text = node.text.strip()  # 去除可能的空白字符
            if tag == 'resource-usage-pool-name':
                rpn.append(text)
            elif tag == 'resource-usage-address':
                rua.append(text)
            elif tag == 'resource-usage-usage':
                ruu.append(text.replace("%", ""))

# 打印结果
print(f"rpn x:{len(rpn)}")
print(f"ruu y:{len(ruu)}")
print(f"rua z:{len(rua)}")

运行结果

执行修复后的代码会得到:

rpn x:2
ruu y:4
rua z:2

完全符合XML中的数据:2个resource-usage-pool-name,2个resource-usage-address,4个resource-usage-usage(每个node下各2个)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 02:54:53