【发布时间】:2021-04-30 13:41:38
【问题描述】:
我有一个包含 2 个地标的 KML 文件: 测试 1 和测试 2。
<kml xmlns="http://earth.google.com/kml/2.2">
<Document>
<Placemark>
<name>Test1</name>
<styleUrl>style1</styleUrl>
<Point><coordinates>1,2</coordinates></Point>
<ExtendedData xmlns:mwm="https://example">
<mwm:visibility>1</mwm:visibility>
</ExtendedData>
</Placemark>
<Placemark>
<name>Test2</name>
<styleUrl>style2</styleUrl>
<Point><coordinates>3,4</coordinates></Point>
<ExtendedData xmlns:mwm="https://example">
<mwm:scale>19</mwm:scale>
<mwm:visibility>1</mwm:visibility>
</ExtendedData>
</Placemark>
</Document>
</kml>
Test2 有一个元素 而 Test1 没有。
我的目标是遍历所有地标,并在一个列表中记录所有地标的名称,并在另一个列表中记录所有地标的比例。
我一直在研究 lxml 和 Xpath 选项,但是当地标(父元素)。
这段代码:
import lxml.etree as et
tree = et.parse(file.kml)
for names in tree.xpath("/kml:kml/kml:Document/kml:Placemark/kml:name", namespaces={'kml': 'http://earth.google.com/kml/2.2','mwm': 'https://example'}):
name_list.append(names.text)
for scales in tree.xpath("/kml:kml/kml:Document/kml:Placemark/kml:ExtendedData/mwm:scale", namespaces={'kml': 'http://earth.google.com/kml/2.2','mwm': 'https://example'}):
scale_list.append(scales.text)
会给我那些清单
[Test1, Test2]
[19]
虽然我正在寻找解决方案来获得类似的东西(如果不存在规模,则输出“0”):
[Test1, Test2]
[0, 19]
任何解决方案或想法?我一直在尝试遍历解析的 XML,但是 2 个不同的命名空间(kml 和 mwm)使得我在论坛上找到的解决方案无法实现......
非常感谢您的帮助!
【问题讨论】:
标签: python xpath namespaces lxml