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

Python解析KML文件时findall无法获取Placemark元素的问题

解决Python读取KML文件时findall返回空列表的问题

问题原因

你的代码里有两处命名空间使用错误:

  1. XPath表达式写法不对:你用了".//{kml}Placemark",这不是lxml中使用命名空间前缀的正确格式,应该用前缀:元素名的形式。
  2. 查找name元素时没加命名空间前缀:KML里的所有元素都属于同一个命名空间,直接找name会匹配不到。

修正后的代码

def scan(filename):
    from lxml import etree
    tree = etree.parse(open(filename, encoding='utf-8'))
    root = tree.getroot()   
    namespaces = {'kml': 'http://www.opengis.net/kml/2.2'}
    # 用前缀:元素名的格式写XPath
    placemarks = root.findall(".//kml:Placemark", namespaces)
    for placemark in placemarks: 
        # 查找name元素也要带上命名空间前缀
        name_text = placemark.findtext('.//kml:name', namespaces=namespaces)
        if name_text:
            print(name_text)
    return

额外验证步骤

如果还是找不到元素,可以先打印根元素的标签确认命名空间是否匹配:

print(root.tag)

如果输出是{http://www.opengis.net/kml/2.2}kml,说明命名空间定义正确,上面的代码就能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:56:09