Python中如何使用命名空间读取Sentinel XML元数据获取云像素占比参数
问题解决代码及说明
你查询失败的核心原因是两点:一是没有写全节点的层级路径,ElementTree默认不会递归查询所有深层子节点,只会检索当前节点的直接子节点;二是只有带n1前缀的节点需要加上命名空间标识,没有前缀的子节点直接写原名称即可。
可直接运行的实现代码如下:
import xml.etree.ElementTree as ET # 路径部分根据你的实际存储位置修改即可 xml_path = project_output+"sentinel_s2_l1c/55HGV_20180311/" xml_file = 'metadata.xml' tree = ET.parse(xml_path+xml_file) root = tree.getroot() # 定义命名空间,和XML头部的n1声明完全对应 namespaces = {'n1': 'https://psd-14.sentinel2.eo.esa.int/PSD/S2_PDI_Level-1C_Tile_Metadata.xsd'} # 按完整层级路径查询:带n1前缀的节点加命名空间前缀,无前缀的子节点直接写原名 cloud_node = root.find('./n1:Quality_Indicators_Info/Image_Content_QI/CLOUDY_PIXEL_PERCENTAGE', namespaces=namespaces) # 非空判断避免部分文件无对应节点时报错 if cloud_node is not None: # 提取数值,转成int或float按需选择 cloud_percentage = float(cloud_node.text) else: # 无参数时可以自定义默认值 cloud_percentage = None print(cloud_percentage)
如果需要批量处理多景Sentinel影像的元数据,把上述逻辑封装成函数,循环遍历所有XML文件调用即可。
内容的提问来源于stack exchange,提问作者Karen Chen
相关产品推荐
相关产品推荐

