/// <summary>
        /// Returns an XML node as a string with specified formatting
        /// </summary>
        /// <param name="doc">XmlNode</param>
        /// <param name="settingsOverrides">Settings overrides</param>
        /// <returns>XML node as a string</returns>
        public static string WriteToString(this XDocument doc, object settingsOverrides)
        {
            var ms = new MemoryStream();

            var settings = new XmlWriterSettings {
                OmitXmlDeclaration = false,
                Indent             = true,
                Encoding           = Encoding.GetEncoding(doc.Declaration.Encoding),
            };

            if (settingsOverrides != null)
            {
                settings.CopyPropertiesFrom(settingsOverrides);
            }

            using (var xw = XmlWriter.Create(ms, settings)) {
                doc.Save(xw);
                xw.Flush();

                var sr = new StreamReader(ms);
                ms.Seek(0, SeekOrigin.Begin);
                return(sr.ReadToEnd());
            }
        }