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

使用Python ElementTree库解析KML/XML中SimpleData标签的name属性值

解决方案

你原有代码的XPath路径中包含Folder层级,若实际KML文件里Placemark节点并不嵌套在Folder节点下,该查询会返回空列表。另外绝大多数标准KML都带有默认命名空间,查询时如果忽略命名空间也会无法匹配到节点。


无命名空间场景实现代码

如果你的KML/XML没有定义默认命名空间,可以直接用通用路径查询,不需要关心上层节点层级:

import xml.etree.ElementTree as ET

# 加载KML/XML文件
tree = ET.parse('你的文件路径.kml')
root = tree.getroot()

# 查找所有name属性为ID2的SimpleData节点
id2_nodes = root.findall(".//SimpleData[@name='ID2']")

# 提取对应值
for node in id2_nodes:
    id2_value = node.text
    print(id2_value)

带命名空间场景实现代码(适用绝大多数标准KML)

标准KML默认携带命名空间http://www.opengis.net/kml/2.2,需要在查询时指定命名空间:

import xml.etree.ElementTree as ET

# 定义KML命名空间
ns = {'kml': 'http://www.opengis.net/kml/2.2'}

tree = ET.parse('你的文件路径.kml')
root = tree.getroot()

# 标签前增加自定义的命名空间前缀即可匹配
id2_nodes = root.findall(".//kml:SimpleData[@name='ID2']", namespaces=ns)

for node in id2_nodes:
    print(node.text)

如果确认你的节点路径为Folder/Placemark/ExtendedData/SchemaData/SimpleData,带命名空间的全路径写法如下:

temp = root.findall(".//kml:Folder/kml:Placemark/kml:ExtendedData/kml:SchemaData/kml:SimpleData[@name='ID2']", namespaces=ns)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:30:05