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

如何在request.get的XML响应中访问指定Layer的Time值?

问题解决:WMTS XML中获取指定图层的TIME值

核心原因:XML命名空间未处理

你的XML根元素带有默认命名空间xmlns="http://www.opengis.net/wmts/1.0",还有ows前缀的独立命名空间。ElementTree默认不会自动识别这些命名空间,直接用find或索引会找不到非ows前缀的元素(比如<Contents>、<Layer>),这就是为什么你觉得XML在</ows:OperationsMetadata>后结束的原因——实际是ElementTree没识别到后续带默认命名空间的元素。

解决方案代码

import requests
import xml.etree.ElementTree as ET

# 替换为你的WMTS GetCapabilities请求URL
wmts_url = "http://datapoint.metoffice.gov.uk/public/data/inspire/view/wmts?"

# 定义命名空间映射,对应XML中的xmlns属性
ns_map = {
    'wmts': 'http://www.opengis.net/wmts/1.0',
    'ows': 'http://www.opengis.net/ows/1.1'
}

# 获取并解析XML响应(用content避免编码问题)
response = requests.get(wmts_url)
root = ET.fromstring(response.content)

# 1. 定位目标图层RADAR_UK_Composite_Highres
target_layer = None
# 遍历所有Layer元素(必须指定wmts命名空间)
for layer in root.findall('.//wmts:Layer', ns_map):
    layer_identifier = layer.find('ows:Identifier', ns_map).text
    if layer_identifier == 'RADAR_UK_Composite_Highres':
        target_layer = layer
        break

# 2. 提取TIME维度的时间值
if target_layer:
    # 找到Identifier为TIME的Dimension元素
    time_dim = target_layer.find('.//wmts:Dimension[wmts:Identifier="TIME"]', ns_map)
    if time_dim:
        default_time = time_dim.find('wmts:Default', ns_map).text
        time_values = [val.text for val in time_dim.findall('wmts:Value', ns_map)]
        
        print(f"默认时间: {default_time}")
        print("可用时间列表:", time_values)
else:
    print("未找到RADAR_UK_Composite_Highres图层")

关键注意点

  1. 命名空间必须显式指定:所有不带ows前缀的元素(比如<Contents>、<Layer>、<Dimension>)都属于wmts命名空间,查找时必须通过命名空间映射指定。
  2. 用response.content解析:避免因编码问题导致XML解析截断,确保完整读取响应内容。
  3. 不要用手动索引:XML结构可能变化,用XPath查找是更可靠的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:36:03