internal static LoggerSettings FromXml()

in src/Microsoft.TestPlatform.ObjectModel/Logger/LoggerSettings.cs [122:233]


    internal static LoggerSettings FromXml(XmlReader reader)
    {
        var elementName = reader.Name;
        var empty = reader.IsEmptyElement;
        var settings = new LoggerSettings
        {
            IsEnabled = true
        };

        // Read attributes.
        if (reader.HasAttributes)
        {
            while (reader.MoveToNextAttribute())
            {
                switch (reader.Name.ToLowerInvariant())
                {
                    case Constants.LoggerFriendlyNameLower:
                        settings.FriendlyName = reader.Value;
                        break;

                    case Constants.LoggerUriName:
                        try
                        {
                            settings.Uri = new Uri(reader.Value);
                        }
#if NETSTANDARD1_0
                        catch
#else
                        catch (UriFormatException)
#endif
                        {
                            throw new SettingsException(
                                string.Format(
                                    CultureInfo.CurrentCulture,
                                    Resources.Resources.InvalidUriInSettings,
                                    reader.Value,
                                    elementName));
                        }
                        break;

                    case Constants.LoggerAssemblyQualifiedNameLower:
                        settings.AssemblyQualifiedName = reader.Value;
                        break;

                    case Constants.LoggerCodeBaseLower:
                        settings.CodeBase = reader.Value;
                        break;

                    case Constants.LoggerEnabledName:
                        bool.TryParse(reader.Value, out var value);
                        settings.IsEnabled = value;
                        break;

                    default:
                        throw new SettingsException(
                            string.Format(
                                CultureInfo.CurrentCulture,
                                Resources.Resources.InvalidSettingsXmlAttribute,
                                elementName,
                                reader.Name));
                }
            }
        }

        // Check for required attributes.
        if (string.IsNullOrWhiteSpace(settings.FriendlyName) &&
            string.IsNullOrWhiteSpace(settings.Uri?.ToString()) &&
            string.IsNullOrWhiteSpace(settings.AssemblyQualifiedName))
        {
            throw new SettingsException(
                string.Format(
                    CultureInfo.CurrentCulture,
                    Resources.Resources.MissingLoggerAttributes,
                    elementName,
                    Constants.LoggerFriendlyName));
        }

        // Move to next node.
        reader.Read();

        // Return empty settings if previous element is empty.
        if (empty)
        {
            return settings;
        }

        // Read inner elements.
        while (reader.NodeType == XmlNodeType.Element)
        {
            switch (reader.Name.ToLowerInvariant())
            {
#if !NETSTANDARD1_0
                case Constants.LoggerConfigurationNameLower:
                    var document = new XmlDocument();
                    var element = document.CreateElement(reader.Name);
                    element.InnerXml = reader.ReadInnerXml();
                    settings.Configuration = element;
                    break;
#endif
                default:
                    throw new SettingsException(
                        string.Format(
                            CultureInfo.CurrentCulture,
                            Resources.Resources.InvalidSettingsXmlElement,
                            elementName,
                            reader.Name));
            }
        }
        reader.ReadEndElement();

        return settings;
    }