RPI/Mathactivity/XML/Sample Parser

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