/// <summary> /// Parses the configuration node using the nohros schema. /// </summary> /// <param name="element"> /// A Xml element representing the configuration root node. /// </param> /// <remarks> /// The <paramref name="element"/> does not need to be the nohros /// configuration node, but a node with name "nohros" must exists on the /// node hierarchy. /// </remarks> T Parse(XmlElement element) { XmlElement root_node = GetRootNode(element); // the logger is used by some methods above and the level threshold of it // could be overloaded by a configuration key. So, we need to do the // first logger instantiation here and adjust the threshold level if // needed. builder.SetLogLevel(GetLogLevel(root_node)); // parse any internal property if (use_dynamic_property_assignment_) { ParseProperties(element, this); ParseProperties(element, builder); } // parse the know configuration nodes. foreach (XmlNode node in root_node.ChildNodes) { if (node.NodeType == XmlNodeType.Element) { string name = node.Name; if (Strings.AreEquals(name, Strings.kRepositoriesNodeName)) { builder.SetRepositories(RepositoriesNode.Parse((XmlElement)node, location_)); } else if (Strings.AreEquals(name, Strings.kProvidersNodeName)) { builder.SetProviders(ProvidersNode.Parse((XmlElement)node, location_)); } else if (Strings.AreEquals(name, Strings.kXmlElementsNodeName)) { XmlElementsNode xml_elements = XmlElementsNode.Parse((XmlElement)node); // Add the element that was used to configure this class to the // collection of xml elements nodes. xml_elements[Strings.kRootXmlElementName] = element; builder.SetXmlElements(xml_elements); } } } OnParseComplete(this); T configuration = CreateConfiguration(builder); OnLoadComplete(configuration); return(configuration); }
/// <summary> /// Creates a instance of the <see cref="CommonNode"/> object by parsing /// the given <paramref name="element"/> Xml element. /// </summary> /// <param name="element"> /// A <see cref="XmlElement"/> that contains the common configuration /// data. /// </param> /// <param name="base_directory"> /// The path to the directory to use as the base directory when resolving /// relative paths. /// </param> /// <returns> /// A <see cref="CommonNode"/> containing the common configuration data. /// </returns> /// <exception cref="ArgumentNullException"> /// <paramref name="element"/> is a <c>null</c> reference. /// </exception> /// <exception cref="ConfigurationException"> /// The <paramref name="element"/> contains invalid configuration data. /// </exception> /// <remarks> /// The <see cref="base_directory"/> is used to resolve the relative paths. /// </remarks> public static CommonNode Parse(XmlElement element, string base_directory) { CommonNode common = new CommonNode(); foreach (XmlNode node in element) { if (node.NodeType == XmlNodeType.Element) { string name = node.Name; if (StringsAreEquals(name, Strings.kRepositoryNodeName)) { common.repositories_ = RepositoriesNode.Parse(element, base_directory); } else if (StringsAreEquals(name, Strings.kProvidersNodeName)) { common.providers_ = ProvidersNode.Parse(element, base_directory); } } } return(common); }