/// <summary>
        /// Deserialize the given xml file to a DocumentationAssembly for usage
        /// </summary>
        /// <param name="xmlDocumentationFile"></param>
        /// <returns></returns>
        public DocumentationAssembly DeserializeDocumentation(string xmlDocumentationFile)
        {
            var xmlDocument = new XmlDocument();
            xmlDocument.Load(xmlDocumentationFile);

            var rootNode = xmlDocument.SelectSingleNode("doc");
            if(rootNode == null) throw new InvalidOperationException("The root node must be 'doc'");

            var assemblyNode = rootNode.SelectSingleNode("assembly");
            if(assemblyNode == null) throw new InvalidOperationException("There is no doc/assembly node");

            var assemblyNameNode = assemblyNode.SelectSingleNode("name");
            if(assemblyNameNode == null) throw new InvalidOperationException("There is no name node for the assembly node");

            var membersNode = rootNode.SelectSingleNode("members");
            if(membersNode == null) throw new InvalidOperationException("There is no members node");

            var result = new DocumentationAssembly();

            foreach (XmlNode memberNode in membersNode.SelectNodes("member"))
            {
                result.Members.Add(new DocumentationMember(memberNode, this));
            }

            result.AssemblyName = assemblyNameNode.InnerText;

            return result;
        }
        /// <summary>
        /// Deserialize the given xml file to a DocumentationAssembly for usage
        /// </summary>
        /// <param name="xmlDocumentationFile"></param>
        /// <returns></returns>
        public DocumentationAssembly DeserializeDocumentation(string xmlDocumentationFile)
        {
            var xmlDocument = new XmlDocument();

            xmlDocument.Load(xmlDocumentationFile);

            var rootNode = xmlDocument.SelectSingleNode("doc");

            if (rootNode == null)
            {
                throw new InvalidOperationException("The root node must be 'doc'");
            }

            var assemblyNode = rootNode.SelectSingleNode("assembly");

            if (assemblyNode == null)
            {
                throw new InvalidOperationException("There is no doc/assembly node");
            }

            var assemblyNameNode = assemblyNode.SelectSingleNode("name");

            if (assemblyNameNode == null)
            {
                throw new InvalidOperationException("There is no name node for the assembly node");
            }

            var membersNode = rootNode.SelectSingleNode("members");

            if (membersNode == null)
            {
                throw new InvalidOperationException("There is no members node");
            }

            var result = new DocumentationAssembly();

            foreach (XmlNode memberNode in membersNode.SelectNodes("member"))
            {
                result.Members.Add(new DocumentationMember(memberNode, this));
            }

            result.AssemblyName = assemblyNameNode.InnerText;

            return(result);
        }