public IMenu readMenu(Document doc){
		
		// Establecemos los valores del menu principal
		IMenu menu = new XMLMenu();
		XmlParserUtil xpu = new XmlParserUtil();
		Node root = doc.getDocumentElement();
		
		menu.setName(xpu.getValueLeafNode(doc, NAME, root));
		menu.setDescripction(xpu.getValueLeafNode(doc, DESCRIPTION, root));
		menu.setBaseUrl(xpu.getValueLeafNode(doc, BASE_URL, root));
		menu.setProfiles(xpu.getProfiles(doc, root));
		
		Map<String, String> globalParams = xpu.getGloblalParameters(doc,root);
		Iterator<Map.Entry<String, String>> it = globalParams.entrySet().iterator();
		
		while(it.hasNext()){
			Map.Entry<String, String> mapEntry = (Map.Entry<String, String>)it.next();
			menu.addGlobalParam(mapEntry.getKey(), mapEntry.getValue());
		}
		
		// Recursividad que recorrera los hijos
		if(xpu.rootHasNodes(doc)){
			//Devuelve una lista de nodos de nivel 0
			List<Node> nodeList = xpu.getListRootNodes(doc);
			
			// Lista de hijos del menu
			SortedSet<INodeMenu> childrenList = new TreeSet<INodeMenu>();
			
			for(int i=0; i<nodeList.size();i++){
				Node n = nodeList.get(i);
				//Construimos la información del nodo y la pasamos al objeto leyendo del xml
				INodeMenu nm = parseNode(doc, n, null);
				
				//Tomamos los hijos de forma recursiva
				SortedSet<INodeMenu> children = getChildren(doc,n,nm);
				nm.setChildren(children);
				
				//añadimos el nodo de nivel 0 al menu
				childrenList.add(nm);
			}
			menu.setChildren(childrenList);
		}
		
		return menu;
	}