static void LoadChildRule(XmlNode currentEl, NodeClass parentRule) { //jump <table> //if (currentEl.LocalName.Equals("table")) // return; //check new rule NodeClass currentRule = null; foreach (NodeClass rule in resultRule) if (rule.name.Equals(currentEl.LocalName)) { currentRule = rule; currentRule.appearCount++; break; } if (Object.ReferenceEquals(currentRule, null)) { currentRule = new NodeClass(currentEl.LocalName); if (currentEl.LocalName.Equals("#text")) { parentRule.containText = true; return; } if (currentEl.LocalName.Equals("#text")) return; resultRule.Add(currentRule); } //add attributes if (!Object.ReferenceEquals(currentEl.Attributes, null) && currentEl.Attributes.Count > 0) foreach (XmlAttribute xmlAttr in currentEl.Attributes) { AttributeClass currentAttr = null; foreach (AttributeClass attr in currentRule.attributes) if (attr.name.Equals(xmlAttr.LocalName)) { //old attribute currentAttr = attr; currentAttr.appearCount++; break; } //new attribute if (Object.ReferenceEquals(currentAttr, null)) { currentAttr = new AttributeClass(xmlAttr.LocalName, xmlAttr.Value); currentRule.attributes.Add(currentAttr); } //check prefix if (!String.IsNullOrEmpty(xmlAttr.Prefix)) currentAttr.prefix = xmlAttr.Prefix; } //check new child of its parent if (!Object.ReferenceEquals(parentRule, null)) if (!parentRule.HasChild(currentEl.LocalName) && !currentRule.name.Equals("#text") && !currentRule.name.Equals("#comment")) parentRule.childNodes.Add(new NodeAppearPair(ref currentRule)); //check child if (currentEl.HasChildNodes) foreach (XmlNode childEl in currentEl) LoadChildRule(childEl, currentRule); }