AddChild() private method

private AddChild ( ConfigurationElement child ) : void
child ConfigurationElement
return void
Example #1
0
        internal void Clone(ConfigurationElement item, ConfigurationElement newItem)
        {
            newItem.SkipCheck = true;
            foreach (ConfigurationAttribute attribute in item.Attributes)
            {
                newItem[attribute.Name] = item[attribute.Name];
            }

            foreach (ConfigurationElement child in item.ChildElements)
            {
                var newChild = newItem.ChildElements[child.ElementTagName];
                Clone(child, newChild);
            }

            if (item is ConfigurationElementCollection collection)
            {
                foreach (ConfigurationElement element in collection)
                {
                    var newElement = ((ConfigurationElementCollection)newItem).CreateNewElement(element.ElementTagName);
                    Clone(element, newElement);
                    newItem.AddChild(newElement);
                }
            }

            newItem.IsLocked  = item.IsLocked;
            newItem.SkipCheck = false;
        }
Example #2
0
        private bool ParseSections(XElement element, ConfigurationElement parent, Location location)
        {
            var result = false;
            var path   = element.GetPath();
            ConfigurationElement node = null;
            var schema = FindSchema(path);
            var sec    = FindSectionSchema(path);
            var name   = element.Name.LocalName;

            if (schema != null)
            {
                if (sec != null)
                {
                    var section = new ConfigurationSection(path, sec.Root, location?.Path, this, element);
                    RootSectionGroup.Add(section, location);
                    node = section;
                }
                else
                {
                    node = schema.CollectionSchema == null
                               ? new ConfigurationElement(null, name, schema, parent, element, this)
                               : new ConfigurationElementCollection(
                        name,
                        schema,
                        parent,
                        element,
                        this);
                }

                parent?.AddChild(node);
                result = true;
            }
            else
            {
                var found = RootSectionGroup.GetSectionDefinition(path);
                if (found != null && found.Ignore && path != "system.webServer")
                {
                    return(true);
                }
            }

            foreach (var item in element.Nodes())
            {
                var child = item as XElement;
                if (child == null)
                {
                    continue;
                }

                var childAdded = ParseSections(child, node, location);
                result = result || childAdded;
            }

            if (!result && !_dontThrow && name != "location")
            {
                throw new COMException(
                          string.Format(
                              "Line number: {0}\r\nError: Unrecognized element '{1}'\r\n",
                              (element as IXmlLineInfo).LineNumber,
                              name));
            }

            return(result);
        }