Konstruksjon av XML fra database
Databasen har en tabell som er satt opp slik:
CREATE TABLE results( resultid INT PRIMARY KEY AUTO_INCREMENT, place VARCHAR(20), year INT, event VARCHAR(10), name VARCHAR(35), nation VARCHAR(10), result VARCHAR(10) );
Skriptet er laget slik at det skal kunne handtere vilkårlige olympiader, og det skal kunne handtere andre resulteter enn 100m, 200m og 400m.
import MySQLdb """ Use MySQL Read a database and establish a XML-structur Database table: CREATE TABLE results ( resultid INT PRIMARY KEY AUTO_INCREMENT, place VARCHAR(20), year INT, event VARCHAR(10), name VARCHAR(35), nation VARCHAR(10), result VARCHAR(10) ); """ XML_FILE='c:\\articles\\ml\\olymp\\ol2db\\made_results.xml' #---------------------------------- # file IO def storeTextFile(filename,txt): try: outfile=open(filename,'w') outfile.write(txt) outfile.close() except: print 'Error writing file ',filename #---------------------------------- # connect and execute a sql-request def connectAndExecute(sql): try: myBase=MySQLdb.connect(host='localhost', user='root', passwd='hemmelig', db='olympic') myTab=myBase.cursor() myTab.execute(sql) myBase.commit() myBase.close() return myTab.fetchall() except MySQLdb.Error, e: print "Error %d: %s" % (e.args[0], e.args[1]) myBase.close() #---------------------------------- # build the simple xml-structure: XML_WRAPPER="""<?xml version="1.0" encoding="ISO-8859-1"?> <IOC> %s </IOC> """ XML_FRAGMENT=""" <athlet> <name>%s</name> <nation>%s</nation> <result>%s</result> </athlet>""" SQL_SELECT_ATHLETS="""SELECT name,nation,result FROM results WHERE place='%s' AND event='%s';""" SQL_SELECT_GAMES="""SELECT place,year FROM results;""" SQL_SELECT_EVENTS="""SELECT event FROM results;""" GAMES=[] EVENTS=[] # final build def buildXMLTree(): xmlstr='' for game in GAMES: xmlstr+=' <OlympicGame place="%s" year="%s">'%\ (game[0],game[1]) for event in EVENTS: xmlstr+='\n <event dist="%s">'%event results=connectAndExecute(SQL_SELECT_ATHLETS%(game[0],event)) for ix in range(0,len(results)): record=results[ix] xmlstr+=XML_FRAGMENT%(record[0],record[1],record[2]) xmlstr+='</event>\n' xmlstr+='</OlympicGame>\n' return XML_WRAPPER%xmlstr # find all pairs of place,year def prepareGameList(): #return [['Barcelona','1992'],...['Athens','2004']] gamelist=[] results=connectAndExecute(SQL_SELECT_GAMES) for result in results: pair=[result[0],result[1]] if pair in gamelist: continue gamelist.append(pair) return gamelist #find all events def prepareEventList(): # return ['100m','200m','400m'] eventlist=[] results=connectAndExecute(SQL_SELECT_EVENTS) for result in results: event=result[0] if event in eventlist: continue eventlist.append(event) return eventlist GAMES=prepareGameList() EVENTS=prepareEventList() storeTextFile(XML_FILE,buildXMLTree())