public void InitializeFromXml(XmlDocument doc)
        {
            XmlElement xml_root = doc.DocumentElement;

            foreach (XmlElement root_node_element in xml_root.ChildNodes)
            {
                mRootNode.InitializeFromXml(root_node_element);
            }
        }
        public void InitializeFromXml(XmlElement node_element)
        {
            node_element.TryQueryStringAttribute("SplitVariableName", out mSplitVariableName);

            node_element.TryQueryStringAttribute("VariableName", out mVariableName);
            node_element.TryQueryStringAttribute("VariableValue", out mVariableValue);
            node_element.TryQueryDoubleAttribute("InformationGain", out mInformationGain);
            node_element.TryQueryIntAttribute("RecordCount", out mRecordCount);

            foreach (XmlElement nodemChildren_element in node_element.ChildNodes)
            {
                if (nodemChildren_element.Name == "ClassVariableValueDistribution")
                {
                    foreach (XmlElement class_variable_value_node in nodemChildren_element.ChildNodes)
                    {
                        if (class_variable_value_node.Name == "ClassVariableValue")
                        {
                            int    variable_value_count = 0;
                            string variable_value_name  = "";
                            class_variable_value_node.TryQueryStringAttribute("VariableValue", out variable_value_name);
                            class_variable_value_node.TryQueryIntAttribute("RecordCount", out variable_value_count);
                            mClassVariableValueDistribution[variable_value_name] = variable_value_count;
                        }
                    }
                }
                else if (nodemChildren_element.Name == "ChildNodes")
                {
                    foreach (XmlElement child_node_element in nodemChildren_element.ChildNodes)
                    {
                        DecisionTreeNode <T> child_node = new DecisionTreeNode <T>(mTree, null, null, this);
                        child_node.InitializeFromXml(child_node_element);
                        mChildren[child_node.VariableValue] = child_node;
                    }
                }
            }
        }