我需要将XML文件转换成JSON。你知道吗
XML脚本示例如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Overpass API 0.7.55.3 9da5e7ae">
<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
<meta osm_base="2018-06-17T15:31:02Z"/>
<node id="330268305" lat="52.5475000" lon="13.3850775">
<tag k="direction" v="240-60"/>
<tag k="tourism" v="viewpoint"/>
<tag k="wheelchair" v="no"/>
</node>
<node id="330269757" lat="52.5473115" lon="13.3843131">
<tag k="direction" v="240-60"/>
<tag k="tourism" v="viewpoint"/>
<tag k="wheelchair" v="limited"/>
</node>
<way id="281307598">
<center lat="52.4934004" lon="13.4843019"/>
<nd ref="2852755795"/>
<nd ref="3772363803"/>
<nd ref="3772363802"/>
<nd ref="2852755796"/>
<nd ref="2852755797"/>
<nd ref="2852755798"/>
<nd ref="2852755795"/>
<tag k="man_made" v="tower"/>
<tag k="tourism" v="viewpoint"/>
<tag k="tower:type" v="observation"/>
<tag k="wheelchair" v="yes"/>
</way>
</osm>
到目前为止执行的代码。你知道吗
import xml.etree.ElementTree as ET
import json
input_file = r"D:\berlin\trial_xml\berlin_viewpoint_locations.xml"
tree = ET.parse(input_file)
root = tree.getroot()
result_list = [{k: (item.get(k) if k != 'extra' else
{i.get('k'): i.get('v') for i in item.iter('tag')})
for k in ('id', 'lat', 'lon', 'extra')}
for item in tree.findall("./node") + tree.findall('./way')]
print(result_list)
在一些Stackoverflow大师的帮助下,我已经取得了半途而废的成果。但是,我仍然需要了解如何:
result_list for
nodes.
It works for
'id'`中添加隐藏在<center lat="52.4934004" lon="13.4843019"/>
中的坐标,如here所述。你知道吗<nd ref="2852755795"/> <nd ref="3772363803"/>
,方法与extra
相同,例如嵌套列表。你知道吗
当前代码不适合您的原因是数据结构不同。我建议为每个
node
和way
类型提供独立的解析器。您已经在解析node
类型,因此要解析way
,可以构造一个相当简单的循环,如下所示:结果:
相关问题 更多 >
编程相关推荐