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

时间:2012-03-09 19:23:46

标签: python xml elementtree

我尝试使用元素树从kml文件中查找元素,如下所示:

from xml.etree.ElementTree import ElementTree

tree = ElementTree()
tree.parse("history-03-02-2012.kml")
p = tree.find(".//name")

该文件的足够子集以证明问题如下:

<?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>

A&#34;名称&#34;元素存在;为什么搜索会变回空?

1 个答案:

答案 0 :(得分:5)

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

尝试:

p = tree.find(".//{http://www.opengis.net/kml/2.2}name")

如果您使用的是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>]