【发布时间】:2019-12-11 17:05:54
【问题描述】:
我有一个 xml 文件 details.xml,xml 文件看起来像这样,
<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Overpass API 0.7.55.7 8b86ff77">
<meta osm_base="2019-08-02T12:21:02Z"/>
<bounds minlat="19.0983000" minlon="72.8890000" maxlat="19.1184000" maxlon="72.9206000"/>
<node id="245670274" lat="19.1000660" lon="72.8961407" version="5" timestamp="2015-10-27T04:31:16Z" changeset="34895909" uid="3339404" user="Anushka&saroj">
<tag k="AND_a_nosr_p" v="10004762"/>
<tag k="name" v="Kulkarni Wadi"/>
<tag k="place" v="locality"/>
<tag k="source" v="AND"/>
</node>
<node id="245670576" lat="19.1030072" lon="72.8885419" version="4" timestamp="2017-11-22T06:20:01Z" changeset="53992152" uid="1306" user="PlaneMad">
<tag k="source" v="AND"/>
</node>
<node id="619199656" lat="19.1023916" lon="72.9200375" version="3" timestamp="2015-07-03T06:26:42Z" changeset="32379895" uid="2897305" user="Ashok09"/>
<way id="353138857" version="2" timestamp="2015-06-12T10:57:15Z" changeset="31917729" uid="2900596" user="harisha">
<nd ref="3589055782"/>
<nd ref="3589055908"/>
<nd ref="3589055924"/>
<nd ref="3589055914"/>
<nd ref="3589055921"/>
<nd ref="3589055916"/>
<nd ref="3589055922"/>
<nd ref="3589055909"/>
<nd ref="3589055913"/>
<nd ref="3589055904"/>
<nd ref="3589055782"/>
<tag k="building" v="yes"/>
</way>
</osm>
我想获取'node'标签内的所有信息并忽略所有其他内容,
对于上述 xml 中的示例,我们有 3 个“节点”标签,我想要每个标签中的所有嵌套(如果可用,否则可用)信息。
如果我将这些信息存储在列表中,结果应该是这样的,
ids=['245670576','245670576','619199656']
lat=['19.1000660','19.1030072','19.1023916']
lon=['72.8961407','72.8885419','72.9200375']
k=[['AND_a_nosr_p','name','place','source'],['source'],[]]
v=[['10004762','Kulkarni Wadi','locality','AND'],['AND'],[]]
如何使用 python 以最有效的方式做到这一点?
【问题讨论】:
-
将所有后续数据关联到每个单独的节点 - 最好将其存储在字典中,你不觉得吗?
-
@RomanPerekhrest 我也可以将它存储在字典中,我需要先获取数据,怎么做?
-
您的 xml 缺少
<osm>的结束标记。
标签: python xml python-3.x xml-parsing