2015-07-11 26 views
0

我有開發一個python腳本taht讀取XML文件的標籤,並將結果轉換爲JSON之後。 現在的問題是,對於每一個元素的XML有一些標籤(相對於1 - M)的Python讀取XML 1-M和創建JSON

<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> 

我的代碼蟒蛇讀取第一個標籤,當我到達標記previsione是重複2次對同一點i採取第一標籤戶外活動搜索的所述第一值,但並不需要第二個。 我可以重新建立一個相同的記錄,但這個時候採取第二個標籤戶外活動搜索的價值。

這是我的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) 

任何幫助整合這個代碼爲2標籤關係創建成JSON文件2元一個片段?

感謝

回答

0

有一個快速的方法來從XML獲得JSON,使用xmltodict。該模塊從XML創建漂亮的快譯通,你可以輕鬆地操縱你的數據,如它是純粹的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元素,並根據需要可以使用它們。