/// <summary>
        /// Parse only method. Parses and adds all entities found in the given node and adds them to the given
        /// list.
        /// </summary>
        /// <param name="node"></param>
        /// <param name="entityElements"></param>
        public static void ParseFromXml(XmlNode rootNode)
        {
            if (rootNode != null)
            {
                RootElement rootElement = new RootElement();

//		ConfigElement.ParseFromXml(GetChildNodeByName(rootNode, "config"), rootElement.ConfigElements);
                ReportExtractionElement.ParseFromXml(GetChildNodeByName(rootNode, "reportextractions"), rootElement.ReportExtractions);
                EntityElement.ParseFromXml(GetChildNodeByName(rootNode, "entities"), rootElement.EntityElements);
                CollectionElement.ParseFromXml(GetChildNodeByName(rootNode, "collections"), rootElement.CollectionElements);
                EnumElement.ParseFromXml(GetChildNodeByName(rootNode, "enums"), rootElement.EnumElements);
                TypeElement.ParseFromXml(GetChildNodeByName(rootNode, "types"), rootElement.TypeElements);
                SqlTypeElement.ParseFromXml(GetChildNodeByName(rootNode, "sqltypes"), rootElement.SqlTypeElements);
                DatabaseElement.ParseFromXml(GetChildNodeByName(rootNode, "databases"), rootElement.DatabaseElements);
                GeneratorElement.ParseFromXml(GetChildNodeByName(rootNode, "generator"), rootElement.GeneratorElements);
            }
        }
        public static ArrayList ParseFromXml(Configuration options, XmlDocument doc, Hashtable sqltypes, Hashtable types, ParserValidationDelegate vd)
        {
            ArrayList   enums    = new ArrayList();
            XmlNodeList elements = doc.DocumentElement.GetElementsByTagName("enum");

            foreach (XmlNode node in elements)
            {
                if (node.NodeType == XmlNodeType.Comment)
                {
                    continue;
                }
                EnumElement type = new EnumElement();
                type.Name = node.Attributes["name"].Value;
                // TODO: this returns all of the children node's innerText as well
                //type.Description = StringUtil.RemoveTrailingBlankLines(node.InnerText.Trim());
                if (node.Attributes["template"] != null)
                {
                    type.Template = node.Attributes["template"].Value;
                }
                if (node.Attributes["integerbased"] != null)
                {
                    type.IntegerBased = Boolean.Parse(node.Attributes["integerbased"].Value);
                }
                type.Values = EnumValueElement.ParseFromXml(type.Name, options, doc, sqltypes, types, vd);

                // if IsIntegerBased - validate that all values are parsable by Int32
                if (type.IntegerBased)
                {
                    foreach (EnumValueElement v in type.Values)
                    {
                        try {
                            Int32.Parse(v.Code);
                        } catch (Exception) {
                            // parse error - must not be an Int32
                            vd(ParserValidationArgs.NewError("IntegerBased was set for enum " + type.Name + " and code '" + v.Code + "' was not parsable by Int32."));
                        }
                    }
                }

                enums.Add(type);
            }
            return(enums);
        }
        /// <summary>
        /// Parse only method. Parses and adds all entities found in the given node and adds them to the given
        /// list.
        /// </summary>
        /// <param name="node"></param>
        /// <param name="enumElements"></param>
        public static void ParseFromXml(XmlNode node, IList enumElements)
        {
            if (node != null && enumElements != null)
            {
                foreach (XmlNode enumNode in node.ChildNodes)
                {
                    if (enumNode.NodeType.Equals(XmlNodeType.Element))
                    {
                        EnumElement enumElement = new EnumElement();

                        enumElement.Name         = GetAttributeValue(enumNode, NAME, enumElement.Name);
                        enumElement.Template     = GetAttributeValue(enumNode, TEMPLATE, enumElement.Template);
                        enumElement.IntegerBased = Boolean.Parse(GetAttributeValue(enumNode, INTEGER_BASED, enumElement.IntegerBased.ToString()));

                        EnumValueElement.ParseFromXml(enumNode, enumElement.Values);

                        enumElements.Add(enumElement);
                    }
                }
            }
        }