NameValueSectionHandler.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / Sys / System / Configuration / NameValueSectionHandler.cs / 1 / NameValueSectionHandler.cs

                            //------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Configuration { 
    using System.Collections; 
    using System.Collections.Specialized;
    using System.Xml; 
    using System.Globalization;

    /// 
    ///    Simple dictionary config factory 
    /// 
    public class NameValueSectionHandler : IConfigurationSectionHandler { 
        const string defaultKeyAttribute = "key"; 
        const string defaultValueAttribute = "value";
 
        /// 
        ///    [To be supplied.]
        /// 
        public object Create(object parent, object context, XmlNode section) { 
            return CreateStatic(parent, section, KeyAttributeName, ValueAttributeName);
        } 
 
        internal static object CreateStatic(object parent, XmlNode section) {
            return CreateStatic(parent, section, defaultKeyAttribute, defaultValueAttribute); 
        }

        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 , ,  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;
        } 
 
        /// 
        ///    [To be supplied.] 
        /// 
        protected virtual string KeyAttributeName {
            get { return defaultKeyAttribute;}
        } 

        ///  
        ///    [To be supplied.] 
        /// 
        protected virtual string ValueAttributeName { 
            get { return defaultValueAttribute;}
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------ 
// 
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//----------------------------------------------------------------------------- 

namespace System.Configuration { 
    using System.Collections; 
    using System.Collections.Specialized;
    using System.Xml; 
    using System.Globalization;

    /// 
    ///    Simple dictionary config factory 
    /// 
    public class NameValueSectionHandler : IConfigurationSectionHandler { 
        const string defaultKeyAttribute = "key"; 
        const string defaultValueAttribute = "value";
 
        /// 
        ///    [To be supplied.]
        /// 
        public object Create(object parent, object context, XmlNode section) { 
            return CreateStatic(parent, section, KeyAttributeName, ValueAttributeName);
        } 
 
        internal static object CreateStatic(object parent, XmlNode section) {
            return CreateStatic(parent, section, defaultKeyAttribute, defaultValueAttribute); 
        }

        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 , ,  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;
        } 
 
        /// 
        ///    [To be supplied.] 
        /// 
        protected virtual string KeyAttributeName {
            get { return defaultKeyAttribute;}
        } 

        ///  
        ///    [To be supplied.] 
        /// 
        protected virtual string ValueAttributeName { 
            get { return defaultValueAttribute;}
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.

                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK