protected void ParseVirtualDirectory(XmlNode virtualDirectoryNode, CodeLiteProject project)
        {
            foreach (XmlNode fileNode in virtualDirectoryNode.SelectNodes("File"))
            {
                project.CodeFiles.Add(fileNode.Attributes.GetNamedItem("Name").Value);
            }

            foreach (XmlNode directoryNode in virtualDirectoryNode.SelectNodes("VirtualDirectory"))
            {
                ParseVirtualDirectory(directoryNode, project);
            }
        }
        public CodeLiteWorkspace ParseWorkspace(string workspacePath)
        {
            // WORKSPACE
            XmlDocument workspaceReader = new XmlDocument();

            workspaceReader.Load(workspacePath);

            CodeLiteWorkspace workspace = new CodeLiteWorkspace();

            workspace.Name = workspaceReader.SelectSingleNode("CodeLite_Workspace").Attributes.GetNamedItem("Name").Value;

            // Configurations
            XmlNode buildMatrixNode = workspaceReader.SelectSingleNode("CodeLite_Workspace/BuildMatrix");

            workspace.Configurations = new List <WorkspaceConfiguration>();

            foreach (XmlNode configurationNode in buildMatrixNode.SelectNodes("WorkspaceConfiguration"))
            {
                WorkspaceConfiguration workspaceConfig = new WorkspaceConfiguration();
                workspace.Configurations.Add(workspaceConfig);
                workspaceConfig.Name = configurationNode.Attributes.GetNamedItem("Name").Value;

                workspaceConfig.Projects = new List <WorkspaceConfigurationProject>();

                foreach (XmlNode projectInConfigNode in configurationNode.SelectNodes("Project"))
                {
                    WorkspaceConfigurationProject projectConfiguration = new WorkspaceConfigurationProject();
                    workspaceConfig.Projects.Add(projectConfiguration);
                    projectConfiguration.Name       = projectInConfigNode.Attributes.GetNamedItem("Name").Value;
                    projectConfiguration.ConfigName = projectInConfigNode.Attributes.GetNamedItem("ConfigName").Value;
                }
            }

            // PROJECTS
            workspace.Projects = new List <CodeLiteProject>();

            foreach (XmlNode projectNode in workspaceReader.SelectNodes("CodeLite_Workspace/Project"))
            {
                CodeLiteProject project = new CodeLiteProject();
                workspace.Projects.Add(project);
                project.Name = projectNode.Attributes.GetNamedItem("Name").Value;
                project.Path = projectNode.Attributes.GetNamedItem("Path").Value;

                XmlDocument projectReader = new XmlDocument();
                projectReader.Load(Path.GetDirectoryName(workspacePath) + Path.DirectorySeparatorChar + project.Path);

                // Files
                project.CodeFiles = new List <string>();

                foreach (XmlNode directoryNode in projectReader.SelectNodes("CodeLite_Project/VirtualDirectory"))
                {
                    ParseVirtualDirectory(directoryNode, project);
                }

                // Dependencies
                project.Dependencies = new List <Dependencies>();

                foreach (XmlNode dependencyNode in projectReader.SelectNodes("CodeLite_Project/Dependencies"))
                {
                    if (dependencyNode.Attributes.GetNamedItem("Name") != null)
                    {
                        Dependencies dependencies = new Dependencies();
                        project.Dependencies.Add(dependencies);
                        dependencies.Name = dependencyNode.Attributes.GetNamedItem("Name").Value;

                        XmlNodeList dependencyProjects = dependencyNode.SelectNodes("Project");

                        dependencies.ProjectNames = new List <string>();

                        foreach (XmlNode dependencyProjectNode in dependencyProjects)
                        {
                            dependencies.ProjectNames.Add(dependencyProjectNode.Attributes.GetNamedItem("Name").Value);
                        }
                    }
                }

                // Configurations
                project.Configurations = new List <CodeLiteProjectConfiguration>();

                foreach (XmlNode configNode in projectReader.SelectSingleNode("CodeLite_Project/Settings").SelectNodes("Configuration"))
                {
                    project.Configurations.Add(ParseProjectConfiguration(configNode));
                }

                // Global settings
                project.GlobalConfiguration = ParseProjectConfiguration(projectReader.SelectSingleNode("CodeLite_Project/Settings").SelectSingleNode("GlobalSettings"));
            }

            return(workspace);
        }