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

使用ElementTree无法定位GPX XML中的time元素求协助

解决GPX XML文件中<time>元素查找失败的问题

这个问题我碰到过!原因很简单——你的GPX XML文件带命名空间,而xml.etree.ElementTree的findall默认不会处理带命名空间的元素,所以才找不到那些<time>标签。

问题根源

看你的GPX根元素:

<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="https://github.com/juanirache/gopro-telemetry">

这里的xmlns="http://www.topografix.com/GPX/1/1"意味着所有子元素(包括<time>)都属于这个命名空间。你原来的代码.//time是在查找没有命名空间的<time>元素,自然匹配不到目标内容。


解决方案

下面提供两种可行的解决方法:

方法1:显式指定命名空间映射

直接在查找时带上命名空间前缀,是最规范的做法:

import xml.etree.ElementTree as ET

tree = ET.parse('sample 1.xml')
root = tree.getroot()

# 定义GPX的命名空间字典
ns = {'gpx': 'http://www.topografix.com/GPX/1/1'}

# 使用命名空间前缀查找time元素
for x in root.findall('.//gpx:time', ns):
    print(x.text)

方法2:忽略命名空间(快速适配)

如果你不想处理命名空间的细节,可以用XPath的local-name()函数匹配元素名,不管它属于哪个命名空间:

import xml.etree.ElementTree as ET

tree = ET.parse('sample 1.xml')
root = tree.getroot()

# 匹配所有local-name为time的元素
for x in root.findall('.//*[local-name()="time"]'):
    print(x.text)

两种方法都能正常输出你需要的时间字符串,比如2020-12-10T19:45:20.370Z这类内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:13:20