如何返回此KML文件中的文件夹元素列表



这是文件的顶部

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <Folder>
  <name>Points</name>
  <Placemark>
    <name>Port Saeed, Dubai</name>
    <styleUrl>#icon-1899-0288D1-nodesc</styleUrl>
    <Point>
      <coordinates>
        55.3295568,25.2513145,0
      </coordinates>
    </Point>
  </Placemark>
  <Placemark>
    <name>Retail Location #1</name>
    <description>Paris, France</description>
    <styleUrl>#icon-1899-0288D1</styleUrl>
    <Point>
      <coordinates>
        2.3620605,48.8867304,0
      </coordinates>
    </Point>
  </Placemark>
  <Placemark>
    <name>Odessa Oblast</name>
...

我想提取"文件夹"元素

这是我的代码。

tree = ET.parse(kml)
root = tree.getroot()
for element in root:
    print element.findall('.//{http://www.opengis.net/kml/2.2/}Folder')

现在打印[]。我相信这是命名空间的问题。我不知道如何创建该字符串?另外,也许值得使用XPath?我想我的命名空间会遇到同样的问题,尽管

考虑通过文件夹的所有后代进行迭代,因为该节点包含子元素和孙子元素。另外,您在解析中使用的名称空间前缀不应以前向斜杠结束。

import xml.etree.ElementTree as ET
root = ET.fromstring('''<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <Folder>
      <name>Points</name>
      <Placemark>
        <name>Port Saeed, Dubai</name>
        <styleUrl>#icon-1899-0288D1-nodesc</styleUrl>
        <Point>
          <coordinates>
        55.3295568,25.2513145,0
          </coordinates>
        </Point>
      </Placemark>
      <Placemark>
        <name>Retail Location #1</name>
        <description>Paris, France</description>
        <styleUrl>#icon-1899-0288D1</styleUrl>
        <Point>
          <coordinates>
        2.3620605,48.8867304,0
          </coordinates>
        </Point>
      </Placemark>
    </Folder>
  </Document>
</kml>''')
# FIND ALL FOLDERS
for i in root.findall('.//{http://www.opengis.net/kml/2.2}Folder'):
    # FIND ALL FOLDER'S DESCENDANTS
    for inner in i.findall('.//*'):
        data = inner.text.strip()     # STRIP LEAD/TRAIL WHITESPACE
        if len(data) > 1:             # LEAVE OUT EMPTY ELEMENTS
            print(data)
# Points
# Port Saeed, Dubai
# icon-1899-0288D1-nodesc
# 55.3295568,25.2513145,0
# Retail Location #1
# Paris, France
# #icon-1899-0288D1
# 2.3620605,48.8867304,0

对于嵌套列表,将节点文本附加到一个列表中,其中每个内部列表对应于每个文件夹

data = []
for i in root.findall('.//{http://www.opengis.net/kml/2.2}Folder'):
    inner = []
    for t in i.findall('.//*'):
        txt = t.text.strip()
        if len(txt) > 1:
            inner.append(txt)
    data.append(inner)

最新更新