private ProfileDocument(XDocument root)
        {
            if (root is null)
            {
                return;
            }

            this.Root = root;

            Name = Root.Elements().First().Elements(XName.Get("name", Namespace)).FirstOrDefault()?.Value;

            var ssidElement    = Root.Descendants(XName.Get("SSID", Namespace)).FirstOrDefault();
            var ssidHexString  = ssidElement?.Descendants(XName.Get("hex", Namespace)).FirstOrDefault()?.Value;
            var ssidHexBytes   = HexadecimalStringConverter.ToBytes(ssidHexString);
            var ssidNameString = ssidElement?.Descendants(XName.Get("name", Namespace)).FirstOrDefault()?.Value;

            Ssid = new NetworkIdentifier(ssidHexBytes, ssidNameString);

            var connectionTypeString = Root.Descendants(XName.Get("connectionType", Namespace)).FirstOrDefault()?.Value;

            if (!BssTypeConverter.TryParse(connectionTypeString, out BssType bssType))
            {
                return;
            }
            this.BssType = bssType;

            AuthenticationString = Root.Descendants(XName.Get("authentication", Namespace)).FirstOrDefault()?.Value;
            if (!AuthenticationMethodConverter.TryParse(AuthenticationString, out AuthenticationMethod authentication))
            {
                return;
            }
            this.Authentication = authentication;

            EncryptionString = Root.Descendants(XName.Get("encryption", Namespace)).FirstOrDefault()?.Value;
            if (!EncryptionTypeConverter.TryParse(EncryptionString, out EncryptionType encryption))
            {
                return;
            }
            this.Encryption = encryption;

            //Debug.WriteLine("SSID: {0}, BssType: {1}, Authentication: {2}, Encryption: {3}",
            //	Ssid,
            //	BssType,
            //	Authentication,
            //	Encryption);

            _connectionModeElement = Root.Descendants(XName.Get("connectionMode", Namespace)).FirstOrDefault();
            if (_connectionModeElement is null)
            {
                return;
            }

            _autoSwitchElement = Root.Descendants(XName.Get("autoSwitch", Namespace)).FirstOrDefault();

            IsValid = true;
        }
        private static string CreateProfile1(string profileName, string ssidString) =>
        $@"<?xml version=""1.0"" encoding=""US-ASCII""?>
<WLANProfile xmlns=""http://www.microsoft.com/networking/WLAN/profile/v1"">
	<name>{profileName}</name>
	<SSIDConfig>
		<SSID>
			<hex>{HexadecimalStringConverter.ToHexadecimalString(ssidString)}</hex>
			<name>{ssidString}</name>
		</SSID>
	</SSIDConfig>
	<connectionType>ESS</connectionType>
	<connectionMode>manual</connectionMode>
	<MSM>
		<security>
			<authEncryption>
				<authentication>WPAPSK</authentication>
				<encryption>TKIP</encryption>
				<useOneX>false</useOneX>
			</authEncryption>
		</security>
	</MSM>
</WLANProfile>";