/// <summary> /// Reads the rules xmlNode from the Xml file /// </summary> /// <param name="rootNode">The root xmlNode of the Xml file</param> private static void ReadRulesNode(XmlNode rootNode) { Rules.Clear(); RuleHierarchy.Clear(); foreach (XmlNode ruleNode in rootNode.SelectNodes("rules/*")) { if (ruleNode.Name == "rule") { MAConfig.RuleHierarchy.Add(RuleBase.CreateRuleFromXmlNode(ruleNode)); } else if (ruleNode.Name == "rule-group") { MAConfig.RuleHierarchy.Add(new RuleGroup(ruleNode)); } } foreach (RuleGroup group in Rules.Where(t => t is RuleGroup)) { group.AddReferencedRulesToCollection(); } }
/// <summary> /// Populates the object based on an XML representation /// </summary> /// <param name="node">The XML representation of the object</param> private void FromXml(XmlNode node) { this.xmlNode = node; XmlAttribute operatorAttribute = node.Attributes["operator"]; XmlAttribute idAttribute = node.Attributes["id"]; if (idAttribute == null || string.IsNullOrWhiteSpace(idAttribute.Value)) { throw new ArgumentNullException("The rule must have an ID"); } else { this.Id = idAttribute.Value; MAConfig.Rules.Add(this); } if (operatorAttribute == null) { this.Operator = RuleGroupOperator.And; } else { RuleGroupOperator ruleGroupOperator = RuleGroupOperator.And; if (Enum.TryParse(operatorAttribute.Value, true, out ruleGroupOperator)) { this.Operator = ruleGroupOperator; } else { throw new ArgumentException(string.Format("The rule group operator '{0}' is unknown", operatorAttribute.Value)); } } XmlNodeList nodes = node.SelectNodes("rule"); if (nodes == null) { return; } else { foreach (XmlNode child in nodes) { this.Rules.Add(RuleBase.CreateRuleFromXmlNode(child)); } } nodes = node.SelectNodes("rule-group"); if (nodes == null) { return; } else { foreach (XmlNode child in nodes) { this.RuleGroups.Add(new RuleGroup(child)); } } }