使用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
相关产品推荐
相关产品推荐

