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

Python-Jupyter中解析带命名空间的XML标签无结果,求助

解决XML解析无结果的问题

你的代码解析XML无结果,主要有两个问题:

  • 错误使用属性选择器:代码里的[@name='ed:SID']是在找**带有name属性且值为ed:SID**的元素,但实际XML里的<ed:SID>是一个元素标签,不是属性,这是核心错误。
  • 忽略XML命名空间:XML中的ed:是命名空间前缀,对应的URL是http://mail.yahoo.com/d/folders/1,解析时必须指定这个命名空间映射,否则无法识别对应元素。

正确的Python解析代码

import xml.etree.ElementTree as ET

# 假设你已经解析XML得到root节点,比如从文件读取:
# tree = ET.parse("your_file.xml")
# root = tree.getroot()

# 或者直接解析XML字符串:
xml_str = """<data>
<row>
<document>
<doc:document xmlns:ed="http://mail.yahoo.com/d/folders/1" xmlns:reslvd="http://mail.yahoo.com/d/folders/1/234" xmlns:ct="http://mail.yahoo.com/d/folders/cool/storybro" xmlns:doc="http://mail.yahoo.com/d/folders/nice/alldone">
<ed:EI>
<ed:SID>9865-346</ed:SID>
</doc:document>
</document>
</row>
</data>"""
root = ET.fromstring(xml_str)

# 定义命名空间映射,前缀对应XML里的命名空间URL
namespaces = {"ed": "http://mail.yahoo.com/d/folders/1"}

x = []
# 使用命名空间前缀查找所有层级下的ed:SID元素
for value in root.findall(".//ed:SID", namespaces=namespaces):
    x.append(value.text)

print(x)  # 输出: ['9865-346']

关键说明

  • 必须通过namespaces参数将前缀ed和对应的URL绑定,解析器才能识别XML中的ed:前缀元素。
  • .//ed:SID路径表示查找所有层级下的ed:SID元素,精准匹配你要提取的目标内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:54:26