python - 如何在包含 ':' 的 KML 树中查找元素

标签 python xml kml elementtree

问题:找不到带有“:”的元素 - 无法运行程序。我找到了一些关于 Qualified Names 的引用资料但我不知道如何应用这些。

代码:

#!/usr/bin/env python
from xml.etree.ElementTree import ElementTree                           

kmlTree = ElementTree()                                                 
kmlTree.parse("data/history-03-08-2012.kml")                            

track = kmlTree.find(".//{http://www.opengis.net/kml/2.2}gx:Track")

示例数据文件:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<gx:Track>
<when>2012-03-10T05:52:38.564-08:00</when>
<gx:coord>16.424247 48.236804 0</gx:coord>
<when>2012-03-10T06:00:39.748-08:00</when>
<gx:coord>16.424247 48.236804 0</gx:coord>
</gx:Track>
</kml>

错误:

Traceback (most recent call last):
  File "main.py", line 7, in <module>
    track = kmlTree.find(".//{http://www.opengis.net/kml/2.2}gx:Track")        #most interesting data is stored in this tag
  File "/usr/lib/python2.6/xml/etree/ElementTree.py", line 614, in find
    return self._root.find(path)
  File "/usr/lib/python2.6/xml/etree/ElementTree.py", line 330, in find
    return ElementPath.find(self, path)
  File "/usr/lib/python2.6/xml/etree/ElementPath.py", line 186, in find
    return _compile(path).find(element)
  File "/usr/lib/python2.6/xml/etree/ElementPath.py", line 176, in _compile
    p = Path(path)
  File "/usr/lib/python2.6/xml/etree/ElementPath.py", line 93, in __init__
    "expected path separator (%s)" % (op or tag)
SyntaxError: expected path separator (:)

代码适用于没有“:”的元素

最佳答案

gx{http://www.google.com/kml/ext/2.2} 的 namespace 快捷方式。从 find 中取出 gx: 并使用正确的命名空间:

from xml.etree import ElementTree as et

data = '''\
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<gx:Track>
<when>2012-03-10T05:52:38.564-08:00</when>
<gx:coord>16.424247 48.236804 0</gx:coord>
<when>2012-03-10T06:00:39.748-08:00</when>
<gx:coord>16.424247 48.236804 0</gx:coord>
</gx:Track>
</kml>
'''

kmlTree = et.fromstring(data)

track = kmlTree.find(".//{http://www.google.com/kml/ext/2.2}Track")
print(track)

输出

<Element '{http://www.google.com/kml/ext/2.2}Track' at 0x40cca70>

关于python - 如何在包含 ':' 的 KML 树中查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9700803/

相关文章:

python - 如何分析 Python 脚本?

python - 'str' 不支持 oauth 的缓冲区接口(interface) Python 3 错误

java - Android 像 Iphone Part2 一样设置启动画面(Activity)

python - 使用 RegEx (或其他方式)将 ",**"替换为换行符

android - 如何为 Android 模拟器控件准备 KML 文件?

python - basemap : create figure with graph and map

python - 使测试使用我的服务器的多处理功能

php - 使用 PHP 将表单数据保存到现有的 XML 文件

javascript - 如何让js生成的xml文件为utf-8

google-maps - 用于驾驶和步行路线的 Google Maps HTTP API