public bool ContainsNode(IFindCriteria <XmlNode> parentNodeCriteria, IFindCriteria <XmlNode> containsCriteria)
        {
            var parentNode = xmlDocument.FindNodeRecursive(parentNodeCriteria);

            if (parentNode != null)
            {
                var xmlNode = parentNode.FindNodeInChildren(containsCriteria);
                return(xmlNode != null);
            }

            return(false);
        }
        public void RemoveNode(IFindCriteria <XmlNode> parentNodeCriteria, IFindCriteria <XmlNode> removeCriteria)
        {
            var parentNode = xmlDocument.FindNodeRecursive(parentNodeCriteria);

            if (parentNode != null)
            {
                var xmlNode = parentNode.FindNodeInChildren(removeCriteria);
                if (xmlNode != null)
                {
                    parentNode.RemoveChild(xmlNode);
                }
            }
        }
        public void AddNode(BaseManifestNode node, IFindCriteria <XmlNode> parentNodeCriteria)
        {
            var parentNode = xmlDocument.FindNodeRecursive(parentNodeCriteria);

            if (parentNode != null)
            {
                parentNode.AddAndroidManifestNode(xmlDocument, node);
            }
            else
            {
                Debug.LogError("Failed to add new node to AndroidManifest.xml since no specified parent node found");
            }
        }
        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);
        }