public static void Save(string filename) { var xmlDoc = new EnhancedXmlDocument(); var rootNode = xmlDoc.CreateElement("MediaConvertGUIConfiguration"); xmlDoc.AppendChild(rootNode); xmlDoc.CreateTextSingleValueElement(rootNode, "MediaInfoPath", MediaInfoPath); xmlDoc.CreateTextSingleValueElement(rootNode, "FFMpegPath", FFMpegPath); var appNode = xmlDoc.CreateElement("Applications"); rootNode.AppendChild(appNode); var appOpenWithNode = xmlDoc.CreateElement("OpenWith"); appNode.AppendChild(appOpenWithNode); var appOpenWithCommentNode = xmlDoc.CreateComment(" <Application>vlc</Application> "); appOpenWithNode.AppendChild(appOpenWithCommentNode); foreach (var app in OpenWithApplications) { var node = xmlDoc.CreateElement("Application"); node.InnerText = app; appOpenWithNode.AppendChild(node); } var codecsNode = xmlDoc.CreateElement("AvailableCodecs"); var videoCodecsNode = xmlDoc.CreateElement("Video"); var audioCodecsNode = xmlDoc.CreateElement("Audio"); rootNode.AppendChild(codecsNode); codecsNode.AppendChild(videoCodecsNode); codecsNode.AppendChild(audioCodecsNode); foreach (var codec in VideoCodecs) { codec.SaveToXmlnode(xmlDoc, videoCodecsNode); } foreach (var codec in AudioCodecs) { codec.SaveToXmlnode(xmlDoc, audioCodecsNode); } var containersNode = xmlDoc.CreateElement("AvailableContainers"); rootNode.AppendChild(containersNode); foreach (var container in Containers) { container.SaveToXmlnode(xmlDoc, containersNode); } SaveDictionaryToXmlNode(DefaultVideoBitRates, xmlDoc, rootNode, "DefaultVideoBitrates", "Bitrate"); SaveDictionaryToXmlNode(DefaultSamplingRates, xmlDoc, rootNode, "DefaultSamplingRates", "Rate"); SaveDictionaryToXmlNode(DefaultAudioBitrates, xmlDoc, rootNode, "DefaultAudioBitrates", "Bitrate"); xmlDoc.Save(filename); }