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

Python 3.6.9中含命名空间前缀的XML XPath无法获取元素求助

解决Python中XPath处理带命名空间XML返回空数组的问题

问题根源

你在Python脚本的namespaces字典里,给ns3指定的命名空间URI是错误的:你写的是http://namespace.com/ns3,但XML文件里ns3对应的实际命名空间是http://www.w3.org/2005/Atom。XPath匹配带命名空间的元素时,是通过命名空间的完整URI来匹配的,不是XML里的前缀别名,URI不匹配就会导致找不到任何元素。

修正后的代码

把namespaces字典中ns3的值替换为XML里声明的正确URI即可:

import lxml.etree as etree

xml = etree.parse(r'./energy_trunc_ns.xml')
r = xml.xpath('/ns3:entry/ns3:content/espi:IntervalBlock/espi:IntervalReading[espi:timePeriod/espi:start=\'1636693200\']/espi:value', 
              namespaces={'ns3': 'http://www.w3.org/2005/Atom', 'espi': 'http://naesb.org/espi'})
print(r[0].text)

额外说明

  • 在线XPath工具能正常运行,是因为工具会自动解析XML中的命名空间声明,自动关联正确的URI,而你在Python里手动指定的URI错误才导致失败。
  • 如果使用Python标准库的xml.etree.ElementTree,它对XPath命名空间的支持有限,处理复杂带命名空间的XML时,建议使用lxml.etree库(需要提前安装:pip install lxml)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:56:16