Python读取xml1m并创建json

2024-09-30 20:34:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我开发了一个python脚本taht读取xml文件的一个标记,并将结果转换成json。 现在的问题是每个元素的xml都有一些标记(关系1-M)

<idpoint>1021</idpoint>
<tipopoint>1</tipopoint>
<latitude>45.188377380</latitude>
<longitude>8.612257004</longitude>
<previsione time="2015-07-11T12:00:00">
<id_tempo>1</id_tempo>
<desc_tempo>sereno</desc_tempo>
<symbol_day>1</symbol_day>
<temp>33</temp>
</previsione>
<previsione time="2015-07-11T18:00:00">
<id_tempo>1</id_tempo>
<desc_tempo>sereno</desc_tempo>
<symbol_day>1</symbol_day>
<temp>29</temp>
</previsione>

我的代码python读取第一个标记,当我到达标记previsione(对同一点重复2次)时,我取第一个标记previsioni的第一个值,但不取第二个值。 我可以重新创建一个相同的记录,但这次取第二个标记previsioni的值

这是我的python代码的一个片段

json_array = [];

for path in files:
    with open(path, 'r') as fr:
        print "Parsing xmldoc %s" % path

        xmldoc = minidom.parse(fr)

        if tipo == "allerte":
            items = xmldoc.getElementsByTagName("point")
        else:
            items = xmldoc.getElementsByTagName("localita")

        for item in items:
            obj = dict()

            if tipo == "allerte":
                obj['id'] = item.getElementsByTagName("idpoint")[0].firstChild.nodeValue



            else:
                obj['id'] = item.getElementsByTagName("idpoint")[0].firstChild.nodeValue

            obj['latitude'] = float(item.getElementsByTagName("latitude")[0].firstChild.nodeValue)
            obj['longitude'] = float(item.getElementsByTagName("longitude")[0].firstChild.nodeValue)
            #TODO: IL symbol code va recuperato dalla prima previsione
            sobj['symbolcode'] = int(item.getElementsByTagName("id_tempo")[0].firstChild.nodeValue)
            json_array.append(obj)

return json.dumps(json_array)

有什么帮助可以将create的代码集成到jsonfile2元素的2标记关系中吗

谢谢


Tags: 标记idjsonobjsymbolitemdesclatitude
1条回答
网友
1楼 · 发布于 2024-09-30 20:34:51

有一种使用^{}从xml快速获取json的方法。这个模块从您的xml创建漂亮的dict,您可以像处理纯json一样轻松地处理数据

假设您的xml示例保存为t2.xml文件,由<xml>...</xml>标记封装

然后这个脚本

#!/usr/bin/env python
# coding: utf-8
import sys
import xmltodict
import json

with open('t2.xml', 'r') as data:
    print "Parsing xmldoc test.xml"

    dict = xmltodict.parse(data)

    print(json.dumps(dict, indent=4, sort_keys=True))

将生成json,如下所示:

{
    "xml": {
        "idpoint": "1021", 
        "latitude": "45.188377380", 
        "longitude": "8.612257004", 
        "previsione": [
            {
                "@time": "2015-07-11T12:00:00", 
                "desc_tempo": "sereno", 
                "id_tempo": "1", 
                "symbol_day": "1", 
                "temp": "33"
            }, 
            {
                "@time": "2015-07-11T18:00:00", 
                "desc_tempo": "sereno", 
                "id_tempo": "1", 
                "symbol_day": "1", 
                "temp": "29"
            }
        ], 
        "tipopoint": "1"
    }
}

特别是,您可以在一个数组中正确地获得两个previsione元素,并可以根据需要使用它们

相关问题 更多 >