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

使用Python的xml.etree.ElementTree提取XML中address元素失败求助

问题根源:XML默认命名空间导致元素查找失败

你遇到的问题核心在于XML文档存在默认命名空间——也就是<esc>标签里的xmlns="http://www.test.com/esc/esc"。这个命名空间会作用于所有子元素(包括<address>),而你直接用root.iter('address')查找时,ElementTree会寻找没有命名空间的<address>元素,自然找不到目标内容。

解决方案:带上命名空间查找元素

方法1:直接使用命名空间完整路径

你可以在元素名前加上命名空间的完整URI,用大括号包裹,直接定位目标元素:

import xml.etree.ElementTree as ET
tree = ET.parse('csr1kv_file.xml')
root = tree.getroot()

# 直接使用带命名空间的元素名查找
for address_elem in root.iter('{http://www.test.com/esc/esc}address'):
    # 获取元素的文本值(而非打印元素对象)
    print(address_elem.text)

方法2:定义命名空间前缀(更简洁易读)

如果需要多次查找不同元素,推荐定义命名空间映射,配合XPath表达式使用,代码可读性更强:

import xml.etree.ElementTree as ET
tree = ET.parse('csr1kv_file.xml')
root = tree.getroot()

# 定义命名空间映射,前缀可自定义(这里用esc作为前缀)
ns = {'esc': 'http://www.test.com/esc/esc'}

# 使用XPath配合命名空间前缀查找所有address元素
for address_elem in root.findall('.//esc:address', ns):
    print(address_elem.text)

补充说明

  • 你代码里的ET.register_namespace("","http://www.test.com/esc/esc")主要用于保存XML时保留命名空间结构,对元素查找没有帮助,可根据需求选择保留或删除。
  • 注意要打印address_elem.text而非元素对象本身,这样才能得到10.25.0.0这个目标文本值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:55:18