Python ElementTree find()在kml文件中不匹配

f00*_*0sa 2 python xml elementtree

我正在尝试使用元素树从kml文件中找到一个元素,如下所示:

from xml.etree.ElementTree import ElementTree

tree = ElementTree()
tree.parse("history-03-02-2012.kml")
p = tree.find(".//name")
Run Code Online (Sandbox Code Playgroud)

该文件的足够子集以演示该问题如下:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <name>Location history from 03/03/2012 to 03/10/2012</name>
  </Document>
</kml>
Run Code Online (Sandbox Code Playgroud)

存在"name"元素; 为什么搜索会变回空?

Cha*_*ffy 5

name您尝试匹配的元素实际上位于KML命名空间内,但您并未考虑使用该命名空间.

尝试:

p = tree.find(".//{http://www.opengis.net/kml/2.2}name")
Run Code Online (Sandbox Code Playgroud)

如果您使用的是lxml的XPath而不是标准库ElementTree,那么您将把命名空间作为字典传递:

>>> tree = lxml.etree.fromstring('''<kml xmlns="http://www.opengis.net/kml/2.2">
...   <Document>
...     <name>Location history from 03/03/2012 to 03/10/2012</name>
...   </Document>
... </kml>''')
>>> tree.xpath('//kml:name', namespaces={'kml': "http://www.opengis.net/kml/2.2"})
[<Element {http://www.opengis.net/kml/2.2}name at 0x23afe60>]
Run Code Online (Sandbox Code Playgroud)