private static void LoadModulesFromXml(Dictionary<string, ModuleDefinition> modules, string path) { // open xml document XmlDocument xml = new XmlDocument(); xml.Load(path); // select nodes XmlNodeList xmlModules = xml.SelectNodes("ModuleDefinitions/ModuleDefinition"); foreach (XmlNode xmlModule in xmlModules) { ModuleDefinition module = new ModuleDefinition(); if (xmlModule.Attributes["id"] == null) throw new Exception(String.Format("Module ID is not specified. File: {0}, Node: {1}", path, xmlModule.OuterXml)); module.Id = xmlModule.Attributes["id"].Value.ToLower(CultureInfo.InvariantCulture); modules.Add(module.Id, module); // controls XmlNodeList xmlControls = xmlModule.SelectNodes("Controls/Control"); foreach (XmlNode xmlControl in xmlControls) { ModuleControl control = new ModuleControl(); if (xmlControl.Attributes["icon"] != null) control.IconFile = xmlControl.Attributes["icon"].Value; if(xmlControl.Attributes["key"] != null) control.Key = xmlControl.Attributes["key"].Value.ToLower(CultureInfo.InvariantCulture); if (xmlControl.Attributes["src"] == null) throw new Exception(String.Format("Control 'src' is not specified. File: {0}, Node: {1}", path, xmlControl.ParentNode.OuterXml)); control.Src = xmlControl.Attributes["src"].Value; if (xmlControl.Attributes["title"] == null) throw new Exception(String.Format("Control 'title' is not specified. File: {0}, Node: {1}", path, xmlControl.ParentNode.OuterXml)); control.Title = xmlControl.Attributes["title"].Value; if (xmlControl.Attributes["type"] != null) control.ControlType = (ModuleControlType)Enum.Parse(typeof(ModuleControlType), xmlControl.Attributes["type"].Value, true); else control.ControlType = ModuleControlType.View; if (String.IsNullOrEmpty(control.Key)) module.DefaultControl = control; module.Controls.Add(control.Key, control); } } }