You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pyosmium处理OSM XML后无法用xml.etree.ElementTree解析

问题:Pyosmium生成的OSM XML无法被ElementTree解析

从OpenStreetMap下载数据后,用Pyosmium筛选项目所需的道路(highways)及对应关联节点,生成新XML文件。但新文件无法用xml.etree.ElementTree解析,报错信息如下:

xml.etree.ElementTree.ParseError: 未找到元素:第1行,第0列

最初误以为是缺失bounds元素,后续排查发现核心原因是未调用SimpleWriter的close()方法——该方法负责刷新缓冲区并关闭写入器,若不调用,文件内容不会完全写入磁盘,导致ElementTree读取时无法识别有效元素。

原代码示例:

wayHandler = XMLhandlers.StreetHandler()
nodeHandler = XMLhandlers.NodeHandler()
wayHandler.apply_file('data/map_2.osm')
nodeHandler.apply_file('data/map_2.osm')

if os.path.exists('data/map_2_TEST.osm'):
    os.remove('data/map_2_TEST.osm')


writer = XMLhandlers.wayWriter('data/map_2_TEST.osm')
writer.apply_file('data/map_2.osm')

tree = ET.parse('data/map_2_TEST.osm')

解决方法

在调用writer.apply_file()完成数据处理后,必须添加writer.close()调用,确保所有数据写入文件:

wayHandler = XMLhandlers.StreetHandler()
nodeHandler = XMLhandlers.NodeHandler()
wayHandler.apply_file('data/map_2.osm')
nodeHandler.apply_file('data/map_2.osm')

if os.path.exists('data/map_2_TEST.osm'):
    os.remove('data/map_2_TEST.osm')

writer = XMLhandlers.wayWriter('data/map_2_TEST.osm')
writer.apply_file('data/map_2.osm')
# 刷新缓冲区并关闭写入器,确保数据完整写入
writer.close()

tree = ET.parse('data/map_2_TEST.osm')

内容的提问来源于stack exchange,提问作者Skovgaard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:55:48