private void parseXMLFile() throws DataInitialisationException{
		try{
			DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
			Document doc = dBuilder.parse(getClass().getResourceAsStream(XMLFileName));
			doc.getDocumentElement().normalize();

			/* Document root element */
			Element rootNode = doc.getDocumentElement();
			if(!rootNode.getNodeName().equals(XMLRootNode)){
				throw new DataInitialisationException("XML root element named " + XMLRootNode + " not found!");
			}

			/* Iterate over categories */
			NodeList catList = doc.getElementsByTagName(XMLCatNode);
			for(int i = 0; i < catList.getLength(); i++){
				/* Category title */
				Element tmpCat = (Element)catList.item(i);
				/* New Category instance */
				Category cat = new Category(tmpCat.getAttribute(XMLIdAttr), tmpCat.getAttribute(XMLLabelAttr));
				/* Add Category to Manager's catMap */
				addCat(cat);
				/* Iterate over questions */
				NodeList qList = tmpCat.getElementsByTagName(XMLQuestionNode);
				for(int j = 0; j < qList.getLength(); j++){
					Element tmpQuestion = (Element)qList.item(j);
					addQuestion(tmpQuestion, cat);
				}
			}
		}catch (ParserConfigurationException l_Exception)
		{
			throw new DataInitialisationException("ParserConfigurationException: " + l_Exception.getMessage());
		}
		catch (SAXException l_Exception)
		{
			throw new DataInitialisationException("SAXException " + l_Exception.getMessage());
		}
		catch (IOException l_Exception)
		{
			throw new DataInitialisationException("IOException: " + l_Exception.getMessage());
		}
	}