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);
}