private Hashtable ScanFactories(XmlUtil xmlUtil) {
Hashtable factoryList;
factoryList = new Hashtable();
if (xmlUtil.Reader.NodeType != XmlNodeType.Element || xmlUtil.Reader.Name != KEYWORD_CONFIGURATION) {
string safeFilename = ConfigurationErrorsException.AlwaysSafeFilename(((IConfigErrorInfo)xmlUtil).Filename);
throw new ConfigurationErrorsException(
SR.GetString(SR.Config_file_doesnt_have_root_configuration, safeFilename),
xmlUtil);
}
// Ignore xmlns attribute
while (xmlUtil.Reader.MoveToNextAttribute()) {
switch (xmlUtil.Reader.Name) {
case KEYWORD_XMLNS:
if (xmlUtil.Reader.Value == KEYWORD_CONFIGURATION_NAMESPACE) {
_flags[NamespacePresentInFile] = true;
_flags[NamespacePresentCurrent] = true;
} else {
ConfigurationErrorsException ce;
ce = new ConfigurationErrorsException(
SR.GetString(SR.Config_namespace_invalid, xmlUtil.Reader.Value, KEYWORD_CONFIGURATION_NAMESPACE),
xmlUtil);
xmlUtil.SchemaErrors.AddError(ce, ExceptionAction.Global);
}
break;
default:
xmlUtil.AddErrorUnrecognizedAttribute(ExceptionAction.NonSpecific);
break;
}
}
// move to first child of <configuration>
xmlUtil.StrictReadToNextElement(ExceptionAction.NonSpecific);
if (xmlUtil.Reader.Depth == 1 && xmlUtil.Reader.Name == KEYWORD_CONFIGSECTIONS) {
xmlUtil.VerifyNoUnrecognizedAttributes(ExceptionAction.NonSpecific);
ScanFactoriesRecursive(xmlUtil, string.Empty, factoryList);
}
return factoryList;
}