Python 读取pykml中带有多个位置标记的kml文件

Python 读取pykml中带有多个位置标记的kml文件,python,kml,pykml,Python,Kml,Pykml,在中,我可以使用以下代码读取文件中的第一个placemark: with open(filename) as f: pm = parser.parse(f).getroot().Document.Folder print "got :" print pm.Placemark.LineString.coordinates 如何将同一文件中的多个placemark读入python?此方法有效: with open(filename) as f: doc =

在中,我可以使用以下代码读取文件中的第一个placemark:

 with open(filename) as f:
     pm = parser.parse(f).getroot().Document.Folder
     print "got :"
     print pm.Placemark.LineString.coordinates
如何将同一文件中的多个placemark读入python?

此方法有效:

with open(filename) as f:
    doc = parser.parse(f).getroot().Document.Folder
for pm in doc.iterchildren():
    if hasattr(pm, 'LineString'):
        print pm.LineString.coordinates

编辑:一个更简单的解决方案,假设所有位置标记都在一个文件夹中:

from pykml import parser

with open(filename) as f:
  folder = parser.parse(f).getroot().Document.Folder

for pm in folder.Placemark:
  print(pm.name)

您还可以使用底层xml库lxml的功能来搜索placemark元素

from pykml import parser
from pykml.factory import nsmap

namespace = {"ns": nsmap[None]}

with open(filename) as f:
  root = parser.parse(f).getroot()
  pms = root.findall(".//ns:Placemark", namespaces=namespace)

  for pm in pms:
    print(pm.name)
如果您专门搜索具有Linestring子级的placemark,还可以使用xpath进行更复杂的搜索

pms = root.xpath(".//ns:Placemark[.//ns:LineString]", namespaces=namespace)

第一行不是必需的,with语句已经创建了一个打开的文件。感谢您指出,@mwil.me!