【问题标题】:Parsing KML/XML with ElementTree library使用 ElementTree 库解析 KML/XML
【发布时间】:2021-09-08 21:58:44
【问题描述】:

我想利用 ElementTree python 库解析 SimpleData 标记中的“ID2”名称属性。

<Placemark>
    <ExtendedData>
        <SchemaData>
            <SimpleData name="ID1">123456</SimpleData>
            <SimpleData name="ID2">111111</SimpleData>
        </SchemaData>
    </ExtendedData>
</Placemark>

我一直在尝试类似的东西

temp=root.findall(".//Folder/Placemark/ExtendedData/SchemaData/SimpleData[@name='ID2']")

我在堆栈溢出中发现的所有内容都不包括“名称”示例中的对象。

【问题讨论】:

  • 您的 KML 文档设置了一个默认的 XML 命名空间,您在查找元素时需要考虑该命名空间。 Stack Overflow 上有很多关于解析命名空间 XML 文档的问题,如果您使用的是 ElementTree 的 lxml 实现,还有文档 here

标签: python xml parsing kml elementtree


【解决方案1】:

如果 XML 使用命名空间,则必须在 XPath 表达式中指定命名空间。

XPath 表达式可以将显式命名空间作为元素名称的一部分。

elems = root.find('{http://www.opengis.net/kml/2.2}Placemark')

另外,.find()findall()iterfind() 函数可以有一个明确的命名空间字典对象作为第二个参数和 XPath 可以使用命名空间前缀。这使得表达式更紧凑,更易于阅读。

namespaces = {'kml': 'http://www.opengis.net/kml/2.2'}
elems = root.find('kml:Placemark', namespaces)

试试:

import xml.etree.ElementTree as ET

data = '''<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Folder>
    <Placemark>
        <ExtendedData>
            <SchemaData>
                <SimpleData name="ID1">123456</SimpleData>
                <SimpleData name="ID2">111111</SimpleData>
            </SchemaData>
        </ExtendedData>
    </Placemark>
  </Folder>
</kml>'''

namespaces = {'kml': 'http://www.opengis.net/kml/2.2'} # add more as needed

# uncomment to load data from file
#tree = ET.parse('simpledata.kml')
#root = tree.getroot()

root = ET.fromstring(data)
xpath = ".//kml:Placemark/kml:ExtendedData/kml:SchemaData/kml:SimpleData[@name='ID2']"
for elem in root.findall(xpath, namespaces):
    print("ID2=", elem.text)

输出:

 ID2=111111

请参阅 ElementTree 文档的 Parsing XML with Namespaces 部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 2014-02-06
    相关资源
    最近更新 更多