コード例 #1
0
ファイル: Program.cs プロジェクト: xchgdzq233/testing
        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);
        }