RPI/Mathactivity/XML/Sample Parser
< RPI | Mathactivity | XML
Jump to navigation
Jump to search
import xml.dom.minidom #XML handling by DOM import sys, os #To check if the settings file is already there import string
class SettingsParser:
def __init__(self, filepath):
if os.path.exists(filepath):
#Parse and dig out the levels
dom = xml.dom.minidom.parse(filepath)
di = self.__getLevels(dom)
#Figure out what level problems we should give
self.level = self.__processLevel(di)
else:
pass #First time it's been run, need to launch tutorial somehow, also get and set colors
def __getLevels(self, dom):
"""Parses the tree for <level> tags, returning both the number of the level and the percent success this
user has had."""
levels = []
percents = []
tries = []
#Loop over the nodes we want (2nd tier from root)
for node in dom.childNodes[0].childNodes:
#If it's not a text node and it's the right type, let's get to work
if node.nodeType == node.ELEMENT_NODE and node.localName == "level":
#Grab the level number and convert to int for returning
levels.append(int(node.getAttribute("num")))
stri = node.firstChild.data.lstrip().split()
for word in stri:
if word.find('%') != -1:
word = float(word[0:-1])
percents.append(word)
else:
word = int(word)
tries.append(word)
dic = self.__setupDictionary(levels, percents, tries)
return dic
def __processLevel(self, dic):
"""Works out at which level problem the game should start."""
level = 0
for elem in dic.keys():
#If we're over the percentage and have tried enough times, skip the level
if dic[elem][0] > 75 and dic[elem][1] > 10:
level+=1
return level
def __setupDictionary(self, levels, percents, tries):
dic = {}
for i in range(len(levels)):
dic[i] = [percents[i], tries[i]]
return dic
XML Format this is to parse:
<settings> <level> #% //Percent successful at this level # //Number of tries at this level </level> </settings>