gpt4 book ai didi

python - 使用lxml解析kml文件

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:34 27 4
gpt4 key购买 nike

我有一个 KML 文件 - 我正在使用 wikipedia 'default'作为示例:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Placemark>
<name>New York City</name>
<description>New York City</description>
<Point>
<coordinates>-74.006393,40.714172,0</coordinates>
</Point>
</Placemark>
</Document>
</kml>

我正在尝试提取坐标。

现在,我有一个代码片段可以嵌入要搜索的命名空间:

#!/usr/python/python3.4/bin/python3

from lxml import etree as ET

tree = ET.parse('sample.kml')
root = tree.getroot

print (root.find('.//{http://www.opengis.net/kml/2.2}coordinates').text)

这很好用。

但是发现了这个:

Parsing XML with namespace in Python via 'ElementTree'

我试图通过使用“root.nsmap”从文档中读取命名空间来完成此操作。

print (root.nsmap)

给我:

{None: '{http://www.opengis.net/kml/2.2}'}

所以我认为我应该能够做到这一点:

print ( root.find('.//coordinates',root.nsmap).text )

或者非常类似的东西,使用None命名空间。 (例如没有前缀)。但这不起作用 - 我在执行此操作时遇到错误:

AttributeError: 'NoneType' object has no attribute  'text'

我认为这意味着我的“查找”在这种情况下没有找到任何内容。

我在这里缺少什么?

最佳答案

这段代码,

root.find('.//coordinates', root.nsmap)

不返回任何内容,因为没有使用前缀。请参阅http://lxml.de/xpathxslt.html#namespaces-and-prefixes .

以下是两个可行的选项。

  1. 定义另一个 nsmap,以真实前缀作为键:

    nsmap2 = {"k": root.nsmap[None]}
    print (root.find('.//k:coordinates', nsmap2).text)
  2. 不要为前缀而烦恼。将命名空间 URI 放在大括号内(“Clark 表示法”)以形成通用元素名称:

    ns = root.nsmap[None]
    print (root.find('.//{{{0}}}coordinates'.format(ns)).text)

关于python - 使用lxml解析kml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33613579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com