public static XmlNode FindNodeInChildren(this XmlNode root, IFindCriteria <XmlNode> criteria)
        {
            XmlNode currentNode = root.FirstChild;

            while (currentNode != null)
            {
                if (criteria.SatisfiesCriteria(currentNode))
                {
                    return(currentNode);
                }
                currentNode = currentNode.NextSibling;
            }
            return(null);
        }
        public static XmlNode FindNodeRecursive(this XmlNode root, IFindCriteria <XmlNode> criteria)
        {
            if (criteria.SatisfiesCriteria(root))
            {
                return(root);
            }

            XmlNode currentNode = root.FirstChild;

            while (currentNode != null)
            {
                var node = currentNode.FindNodeRecursive(criteria);
                if (node != null)
                {
                    return(node);
                }
                currentNode = currentNode.NextSibling;
            }

            return(null);
        }