如何获取xml数据以在数据库中写入

时间:2014-02-25 16:59:24

标签: python xml database xbmc

我正在使用Python脚本从服务器读取xml数据并将xml数据存储在数据库中。当我创建数据库时,我可以看到它将在数据库中编写xml列表而不获取每个数据,并且它没有创建如下所示的数据库表:http://imageshack.com/a/img401/4210/ofa5.jpg

我从服务器链接获取的xml:http://ontv.dk/xmltv/c81e728d9d4c2f636f067f89cc14862c

以下是当前代码:

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数据。我想知道在创建数据库表之后,如何编写xbmc源以获取要存储在数据库中的每个xml数据?

1 个答案:

答案 0 :(得分:0)

我没有安装xbmc模块,因此这段代码基于从文件加载XML然后解析它。

我在XML中看不到对image_largeimage_smallupdates_id的任何引用,因此我将这些内容留下了注释。有一种更好的方法可以做到这一点,但这应该让你开始,希望从这里你应该能够找出如何遍历列表以将每个程序写入数据库表。

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)