public void LoadStructure(bool includeAttributeData = false)
        {
            this.IncludeAttributes = includeAttributeData;
            if (this.Source?.Source == null || !this.Source.Source.Exists)
            {
                throw new ArgumentException("Source cannot be empty.", nameof(this.Source));
            }

            var firstFile = this.Source.Source.EnumerateFiles("*.xml", SearchOption.TopDirectoryOnly).FirstOrDefault();

            if (firstFile == null)
            {
                throw new FileNotFoundException("Directory must contain valid XML files.");
            }

            var xmlDoc = new XmlDocument();

            xmlDoc.Load(firstFile.FullName);
            if (xmlDoc == null)
            {
                throw new ArgumentNullException(nameof(this.Source), "Could not generate XML Paths for given directory.");
            }

            XPaths = new List <string>();

            xmlDoc.IterateXmlNodes((XmlNode node) =>
            {
                var xpath = XmlHelpers.FindXPath(node, true);
                if (!string.IsNullOrWhiteSpace(xpath))
                {
                    XPaths.Add(xpath);
                }
            }, includeAttributeData);
            XPaths.Sort();
        }