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
相关产品推荐
相关产品推荐

