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

使用xml.etree.ElementTree提取XML中pool_192_168_1_值失败求助

XML资源池名称提取失败的问题排查与解决

问题场景

现有如下XML结构:

<multi-routing-engine-results>
    <multi-routing-engine-item>
        <re-name>node0</re-name>
        <source-resource-usage-pool-information>
            <resource-usage-entry style="all-pat-pool">
                <resource-usage-pool-name>pool_192_168_1_113</resource-usage-pool-name>
                <resource-usage-total-pool-num>57</resource-usage-total-pool-num>
                <resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
                <resource-usage-peak-usage>21%</resource-usage-peak-usage>
                <resource-usage-peak-date-time seconds="1736272550">2025-01-07 11:55:50 CST</resource-usage-peak-date-time>
                <resource-usage-total-address>1</resource-usage-total-address>
                <resource-usage-total-used>7741</resource-usage-total-used>
                <resource-usage-total-avail>56771</resource-usage-total-avail>
                <resource-usage-total-total>64512</resource-usage-total-total>
                <resource-usage-total-usage>11%</resource-usage-total-usage>
            </resource-usage-entry>
            <resource-usage-entry style="all-pat-pool">
                <resource-usage-pool-name>pool_192_168_1_114</resource-usage-pool-name>
                <resource-usage-total-pool-num>57</resource-usage-total-pool-num>
                <resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
                <resource-usage-peak-usage>8%</resource-usage-peak-usage>
                <resource-usage-peak-date-time seconds="1734024324">2024-12-12 11:25:24 CST</resource-usage-peak-date-time>
                <resource-usage-total-address>1</resource-usage-total-address>
                <resource-usage-total-used>2520</resource-usage-total-used>
                <resource-usage-total-avail>61992</resource-usage-total-avail>
                <resource-usage-total-total>64512</resource-usage-total-total>
                <resource-usage-total-usage>3%</resource-usage-total-usage>
            </resource-usage-entry>
            <resource-usage-entry style="all-pat-pool">
                <resource-usage-pool-name>gos_src_pool_207_195_114_101</resource-usage-pool-name>
                <resource-usage-total-pool-num>57</resource-usage-total-pool-num>
                <resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
                <resource-usage-peak-usage>32%</resource-usage-peak-usage>
                <resource-usage-peak-date-time seconds="1733419670">2024-12-05 11:27:50 CST</resource-usage-peak-date-time>
                <resource-usage-total-address>1</resource-usage-total-address>
                <resource-usage-total-used>15115</resource-usage-total-used>
                <resource-usage-total-avail>49397</resource-usage-total-avail>
                <resource-usage-total-total>64512</resource-usage-total-total>
                <resource-usage-total-usage>23%</resource-usage-total-usage>
            </resource-usage-entry>
            <resource-usage-entry style="all-pat-pool">
                <resource-usage-pool-name>gos_src_pool_207_195_114_103</resource-usage-pool-name>
                <resource-usage-total-pool-num>57</resource-usage-total-pool-num>
                <resource-usage-port-ol-factor>1</resource-usage-port-ol-factor>
                <resource-usage-peak-usage>19%</resource-usage-peak-usage>
                <resource-usage-peak-date-time seconds="1739283197">2025-02-11 08:13:17 CST</resource-usage-peak-date-time>
                <resource-usage-total-address>1</resource-usage-total-address>
                <resource-usage-total-used>7920</resource-usage-total-used>
                <resource-usage-total-avail>56592</resource-usage-total-avail>
                <resource-usage-total-total>64512</resource-usage-total-total>
                <resource-usage-total-usage>12%</resource-usage-total-usage>
            </resource-usage-entry>
        </source-resource-usage-pool-information>
    </multi-routing-engine-item>
</multi-routing-engine-results>

尝试提取所有以pool_192_168_1_开头的资源池名称,但执行以下代码后无任何结果:

outputxml1 = etree.tostring(rpc_xml, encoding='unicode')
root = ET.fromstring(outputxml1)

x = 1
for item in root.findall('./multi-routing-engine-results/multi-routing-engine-item/re-name/source-resource-usage-pool-information/resource-usage-pool-name'):
 print(str(item))
 x = x + 1

问题分析

代码存在三个核心错误:

  • XPath路径错误:root已经是<multi-routing-engine-results>节点,路径开头的./multi-routing-engine-results/属于重复指定根节点;同时<source-resource-usage-pool-information>与<re-name>是同级节点,原路径错误地将其作为<re-name>的子节点查找,完全不符合XML层级结构。
  • 未过滤目标前缀:代码仅查找所有resource-usage-pool-name节点,没有筛选出以pool_192_168_1_开头的名称。
  • 打印内容错误:str(item)输出的是节点对象的字符串表示,而非节点内的文本内容,即使路径正确也无法得到实际池名称。

修正后的代码

import xml.etree.ElementTree as ET
# 假设rpc_xml是已有的XML对象
outputxml1 = etree.tostring(rpc_xml, encoding='unicode')
root = ET.fromstring(outputxml1)

# 修正后的XPath路径,匹配正确层级
pool_names = root.findall('./multi-routing-engine-item/source-resource-usage-pool-information/resource-usage-entry/resource-usage-pool-name')

x = 1
for item in pool_names:
    pool_name = item.text
    # 过滤目标前缀的资源池名称
    if pool_name.startswith('pool_192_168_1_'):
        print(pool_name)
        x += 1

关键修正点

  • 调整XPath路径为./multi-routing-engine-item/source-resource-usage-pool-information/resource-usage-entry/resource-usage-pool-name,对应XML的实际层级。
  • 使用item.text获取节点的文本内容,即真实的资源池名称。
  • 添加startswith('pool_192_168_1_')条件,筛选出目标资源池。

内容的提问来源于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 12:08:14