Пример #1
0
        /**
         * Create
         *
         * Given a partially composed config object (possibly null)
         * and some input from the config system, return a
         * further partially composed config object
         */
        public virtual object Create(object parent, object context, XmlNode section)
        {
            Hashtable result;

            // start result off as a shallow clone of the parent

            if (parent == null)
            {
                result = new Hashtable();
            }
            else
            {
                result = new Hashtable((IDictionary)parent);
            }

            // verify that there are no children

            HandlerBase.CheckForChildNodes(section);

            // iterate through each XML section in order and apply the directives

            foreach (XmlAttribute attribute in section.Attributes)
            {
                // handle name-value pairs
                result[attribute.Name] = attribute.Value;
            }

            return(result);
        }
        internal static object CreateStatic(object parent, XmlNode section, string keyAttriuteName, string valueAttributeName)
        {
            ReadOnlyNameValueCollection result;

            // start result off as a shallow clone of the parent

            if (parent == null)
            {
                result = new ReadOnlyNameValueCollection(StringComparer.OrdinalIgnoreCase);
            }
            else
            {
                ReadOnlyNameValueCollection parentCollection = (ReadOnlyNameValueCollection)parent;
                result = new ReadOnlyNameValueCollection(parentCollection);
            }

            // process XML

            HandlerBase.CheckForUnrecognizedAttributes(section);

            foreach (XmlNode child in section.ChildNodes)
            {
                // skip whitespace and comments
                if (HandlerBase.IsIgnorableAlsoCheckForNonElement(child))
                {
                    continue;
                }

                // handle <set>, <remove>, <clear> tags
                if (child.Name == "add")
                {
                    String key   = HandlerBase.RemoveRequiredAttribute(child, keyAttriuteName);
                    String value = HandlerBase.RemoveRequiredAttribute(child, valueAttributeName, true /*allowEmptyString*/);
                    HandlerBase.CheckForUnrecognizedAttributes(child);

                    result[key] = value;
                }
                else if (child.Name == "remove")
                {
                    String key = HandlerBase.RemoveRequiredAttribute(child, keyAttriuteName);
                    HandlerBase.CheckForUnrecognizedAttributes(child);

                    result.Remove(key);
                }
                else if (child.Name.Equals("clear"))
                {
                    HandlerBase.CheckForUnrecognizedAttributes(child);
                    result.Clear();
                }
                else
                {
                    HandlerBase.ThrowUnrecognizedElement(child);
                }
            }

            result.SetReadOnly();

            return(result);
        }
        public virtual object Create(object parent, object context, XmlNode section)
        {
            Hashtable hashtable;

            if (parent == null)
            {
                hashtable = new Hashtable(StringComparer.OrdinalIgnoreCase);
            }
            else
            {
                hashtable = (Hashtable)((Hashtable)parent).Clone();
            }
            HandlerBase.CheckForUnrecognizedAttributes(section);
            foreach (XmlNode node in section.ChildNodes)
            {
                if (!HandlerBase.IsIgnorableAlsoCheckForNonElement(node))
                {
                    if (node.Name == "add")
                    {
                        string str2;
                        HandlerBase.CheckForChildNodes(node);
                        string str = HandlerBase.RemoveRequiredAttribute(node, this.KeyAttributeName);
                        if (this.ValueRequired)
                        {
                            str2 = HandlerBase.RemoveRequiredAttribute(node, this.ValueAttributeName);
                        }
                        else
                        {
                            str2 = HandlerBase.RemoveAttribute(node, this.ValueAttributeName);
                        }
                        HandlerBase.CheckForUnrecognizedAttributes(node);
                        if (str2 == null)
                        {
                            str2 = "";
                        }
                        hashtable[str] = str2;
                    }
                    else if (node.Name == "remove")
                    {
                        HandlerBase.CheckForChildNodes(node);
                        string key = HandlerBase.RemoveRequiredAttribute(node, this.KeyAttributeName);
                        HandlerBase.CheckForUnrecognizedAttributes(node);
                        hashtable.Remove(key);
                    }
                    else if (node.Name.Equals("clear"))
                    {
                        HandlerBase.CheckForChildNodes(node);
                        HandlerBase.CheckForUnrecognizedAttributes(node);
                        hashtable.Clear();
                    }
                    else
                    {
                        HandlerBase.ThrowUnrecognizedElement(node);
                    }
                }
            }
            return(hashtable);
        }
        internal static object CreateStatic(object parent, XmlNode section, string keyAttriuteName, string valueAttributeName)
        {
            ReadOnlyNameValueCollection values;

            if (parent == null)
            {
                values = new ReadOnlyNameValueCollection(StringComparer.OrdinalIgnoreCase);
            }
            else
            {
                ReadOnlyNameValueCollection values2 = (ReadOnlyNameValueCollection)parent;
                values = new ReadOnlyNameValueCollection(values2);
            }
            HandlerBase.CheckForUnrecognizedAttributes(section);
            foreach (XmlNode node in section.ChildNodes)
            {
                if (!HandlerBase.IsIgnorableAlsoCheckForNonElement(node))
                {
                    if (node.Name == "add")
                    {
                        string str  = HandlerBase.RemoveRequiredAttribute(node, keyAttriuteName);
                        string str2 = HandlerBase.RemoveRequiredAttribute(node, valueAttributeName, true);
                        HandlerBase.CheckForUnrecognizedAttributes(node);
                        values[str] = str2;
                    }
                    else if (node.Name == "remove")
                    {
                        string name = HandlerBase.RemoveRequiredAttribute(node, keyAttriuteName);
                        HandlerBase.CheckForUnrecognizedAttributes(node);
                        values.Remove(name);
                    }
                    else if (node.Name.Equals("clear"))
                    {
                        HandlerBase.CheckForUnrecognizedAttributes(node);
                        values.Clear();
                    }
                    else
                    {
                        HandlerBase.ThrowUnrecognizedElement(node);
                    }
                }
            }
            values.SetReadOnly();
            return(values);
        }
Пример #5
0
        public virtual object Create(object parent, object context, XmlNode section)
        {
            Hashtable hashtable;

            if (parent == null)
            {
                hashtable = new Hashtable();
            }
            else
            {
                hashtable = new Hashtable((IDictionary)parent);
            }
            HandlerBase.CheckForChildNodes(section);
            foreach (XmlAttribute attribute in section.Attributes)
            {
                hashtable[attribute.Name] = attribute.Value;
            }
            return(hashtable);
        }
        /// <devdoc>
        /// Given a partially composed config object (possibly null)
        /// and some input from the config system, return a
        /// further partially composed config object
        /// </devdoc>
        public virtual object Create(Object parent, Object context, XmlNode section)
        {
            Hashtable res;

            // start res off as a shallow clone of the parent

            if (parent == null)
            {
                res = new Hashtable(StringComparer.OrdinalIgnoreCase);
            }
            else
            {
                res = (Hashtable)((Hashtable)parent).Clone();
            }

            // process XML

            HandlerBase.CheckForUnrecognizedAttributes(section);

            foreach (XmlNode child in section.ChildNodes)
            {
                // skip whitespace and comments, throws if non-element
                if (HandlerBase.IsIgnorableAlsoCheckForNonElement(child))
                {
                    continue;
                }

                // handle <add>, <remove>, <clear> tags
                if (child.Name == "add")
                {
                    HandlerBase.CheckForChildNodes(child);
                    String key = HandlerBase.RemoveRequiredAttribute(child, KeyAttributeName);
                    String value;
                    if (ValueRequired)
                    {
                        value = HandlerBase.RemoveRequiredAttribute(child, ValueAttributeName);
                    }
                    else
                    {
                        value = HandlerBase.RemoveAttribute(child, ValueAttributeName);
                    }
                    HandlerBase.CheckForUnrecognizedAttributes(child);

                    if (value == null)
                    {
                        value = "";
                    }

                    res[key] = value;
                }
                else if (child.Name == "remove")
                {
                    HandlerBase.CheckForChildNodes(child);
                    String key = HandlerBase.RemoveRequiredAttribute(child, KeyAttributeName);
                    HandlerBase.CheckForUnrecognizedAttributes(child);

                    res.Remove(key);
                }
                else if (child.Name.Equals("clear"))
                {
                    HandlerBase.CheckForChildNodes(child);
                    HandlerBase.CheckForUnrecognizedAttributes(child);
                    res.Clear();
                }
                else
                {
                    HandlerBase.ThrowUnrecognizedElement(child);
                }
            }

            return(res);
        }