2014-02-25 3 views
1

저는 파이썬 스크립트를 사용하여 서버에서 XML 데이터를 읽고 데이터베이스에 XML 데이터를 저장하려고합니다. 데이터베이스를 만들면 각 데이터를 가져 오지 않고 XML 목록을 데이터베이스에 쓰고 다음과 같은 데이터베이스 테이블을 만들지 않습니다. http://imageshack.com/a/img401/4210/ofa5.jpgxml 데이터를 가져와 데이터베이스에 쓰는 방법

xml은 서버 링크 :

import xbmc 
import xbmcgui 
import xbmcaddon 
import os 
import urllib 
import urllib2 
import StringIO 
import sqlite3 
import datetime 
import time 
from xml.etree import ElementTree 

ADDON = xbmcaddon.Addon(id = 'script.myaddon') 

class MyScript(xbmcgui.WindowXML): 

def __new__(cls): 
     return super(MyScript, cls).__new__(cls, 'script-menu.xml', ADDON.getAddonInfo('path')) 

def onInit(self): 

    #DOWNLOAD THE XML SOURCE HERE 
    url = ADDON.getSetting('ontv.url') 
    req = urllib2.Request(url) 
    response = urllib2.urlopen(req) 
    data = response.read() 
    response.close() 
    profilePath = xbmc.translatePath(os.path.join('special://userdata/addon_data/script.tvguide', '')) 
    io = StringIO.StringIO(req) 
    context = ElementTree.iterparse(io) 


    if os.path.exists(profilePath): 
     profilePath = profilePath + 'source.db' 
     con = sqlite3.connect(profilePath) 
     cur = con.cursor() 
     cur.execute('CREATE TABLE programs(channel TEXT, title TEXT, start_date TIMESTAMP, end_date TIMESTAMP, description TEXT, image_large TEXT, image_small TEXT, source TEXT, updates_id INTEGER, FOREIGN KEY(channel, source) REFERENCES channels(id, source) ON DELETE CASCADE, FOREIGN KEY(updates_id) REFERENCES updates(id) ON DELETE CASCADE)') 
     cur.close() 
     fc = open(profilePath, 'w') 
     fc.write(data) 
     fc.close 

나는 각 XML 데이터 나 데이터베이스 테이블을 생성 할 때 한 후 데이터베이스에 기록 할 가져 오기하려는 : 여기 http://ontv.dk/xmltv/c81e728d9d4c2f636f067f89cc14862c

는 현재 코드입니다. 나는 xbmc에 대한 소스를 작성하여 데이터베이스 테이블을 만들 때 데이터베이스에 저장할 각 xml 데이터를 가져 오는 방법을 알고 싶습니다.

+0

create table 문 실행 후 커밋 문 ('con.commit()')이 없으므로 변경 사항이 유지되지 않습니다. – Talvalin

+0

@Talvalin 커밋 문'con.commit()'이 없으므로 어떻게해야합니까? XML 데이터를 가져올 수있는 방법은 무엇입니까? –

+0

ElementTree 설명서를 읽으십시오. http://docs.python.org/2/library/xml.etree.elementtree.html 필요한 데이터를 XML 파일에서 가져 와서 글을 써보십시오. 당신의 식탁에. – Talvalin

답변

0

xbmc 모듈을 설치하지 않았으므로이 코드는 파일에서 XML을로드 한 다음 구문 분석을 기반으로합니다.

image_large, image_small 또는 updates_id에 대한 참조를 XML에서 볼 수 없으므로 주석을 달았습니다. 아마이 방법을 사용하는 것이 더 좋을지 모르지만,이 방법을 사용하면 시작해야 할 것입니다. 여기에서 목록을 반복하여 각 프로그램을 데이터베이스 테이블에 쓰는 방법을 알아낼 수 있어야합니다.

import xml.etree.ElementTree as ET 

tree = ET.parse('epg.xml') 
root = tree.getroot() 
programmes = [] 

for item in root.findall('programme'): 
    programme = {} 
    programme["channel"] = item.attrib['channel'] 
    programme["title"] = item.find('title').text 
    programme["start_date"] = item.attrib['start'] 
    programme["end_date"] = item.attrib['stop'] 
    programme["description"] = item.find('desc').text 
    #programme["image_large"] = 
    #programme["image_small"] = 
    programme["source"] = item.find('icon').attrib['src'] 
    #programme["updates_id"] = 
    programmes.append(programme)