我想利用 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']")
我在堆栈溢出中发现的所有内容都不包括“名称”的例子。
以下是如何使用 ElementTree 在提供的 KML/XML 片段中找到“ID2”
SimpleData
标记的值:
import xml.etree.ElementTree as ET
kml_string = """
<Placemark>
<ExtendedData>
<SchemaData>
<SimpleData name="ID1">123456</SimpleData>
<SimpleData name="ID2">111111</SimpleData>
</SchemaData>
</ExtendedData>
</Placemark>
"""
root = ET.fromstring(kml_string)
# 使用 XPath 表达式查找属性为 'ID2' 的 'SimpleData' 元素
id2_element = root.find('.//SimpleData[@name="ID2"]')
if id2_element is not None:
id2_value = id2_element.text
print(id2_value) # 输出:111111
else:
print("未找到 ID2 元素")
说明:
-
导入
xml.etree.ElementTree
: 这将导入必要的库。 -
将 KML 字符串解析为
ElementTree
对象。 -
使用 XPath 表达式
find()
: -
//
: 在任何层级中搜索。 -
SimpleData[@name="ID2"]
: 查找名称属性为“ID2”的“SimpleData”元素。 -
提取文本内容:
如果找到该元素,则使用
.text
获取其文本内容(在本例中为“111111”)。
这会将“ID2”
SimpleData
标记的值打印到控制台。
如果有多个“Placemark”元素并且想要提取每个元素的“ID2”值,则可以使用
findall()
方法并遍历结果:
for placemark in root.findall('.//Placemark'):
id2_element = placemark.find('.//SimpleData[@name="ID2"]')
if id2_element is not None:
print(id2_element.text)
这将打印在所有“Placemark”元素中找到的每个“ID2”的值。
标签:python,xml,parsing,kml,elementtree From: 69110107