public static string ReplaceSchemas(this string xml, QtiResourceType resourceType, QtiVersion newVersion, QtiVersion oldVersion, bool localSchema)
        {
            var tagName = resourceType == QtiResourceType.AssessmentItem ? "assessmentItem" :
                          resourceType == QtiResourceType.AssessmentTest ? "assessmentTest" :
                          "manifest";
            var baseScheme         = GetBaseSchema(resourceType, newVersion);
            var baseSchemeLocation = GetBaseSchemaLocation(resourceType, newVersion);
            var qtiParentTag       = Regex.Match(xml, $"<{tagName}(.*?)>").Value;
            var qtiParentOrg       = qtiParentTag;
            var schemaPrefix       = Regex.Match(qtiParentTag, " (.*?)schemaLocation")
                                     .Value.Replace(":schemaLocation", "").Trim();

            schemaPrefix = schemaPrefix.Substring(schemaPrefix.LastIndexOf(" ", StringComparison.Ordinal), schemaPrefix.Length - schemaPrefix.LastIndexOf(" ", StringComparison.Ordinal)).Trim();

            var schemaLocations  = Regex.Match(qtiParentTag, @$ "{schemaPrefix}:schemaLocation=" "(.*?)" "").Value;
            var extensionSchemas = RemoveSchemaFromLocation(schemaLocations, GetBaseSchema(resourceType, oldVersion));

            if (resourceType == QtiResourceType.Manifest)
            {
                extensionSchemas = RemoveSchemaFromLocation(extensionSchemas, GetBaseSchema(QtiResourceType.AssessmentItem, oldVersion));
                extensionSchemas = extensionSchemas +
                                   $" {GetBaseSchema(QtiResourceType.AssessmentItem, newVersion)} {GetBaseSchemaLocation(QtiResourceType.AssessmentItem, newVersion)}";
            }

            qtiParentTag = Regex.Replace(qtiParentTag, @$ "{schemaPrefix}:schemaLocation=" "(.*?)" "", "");
            qtiParentTag = Regex.Replace(qtiParentTag, @$ "xmlns:{schemaPrefix}=" "(.*?)" "", "");
            qtiParentTag = Regex.Replace(qtiParentTag, @$ "xmlns:xsi=" "(.*?)" "", "");
            qtiParentTag = Regex.Replace(qtiParentTag, @"xmlns=""(.*?)""", "");

            if (localSchema)
            {
                var prefix = resourceType == QtiResourceType.Manifest ? "/" : "../";
                baseSchemeLocation = $"{prefix}controlxsds/{Path.GetFileName(baseSchemeLocation)}";
            }
            var schemaLocation = $"xsi:schemaLocation=\"{baseScheme}  {baseSchemeLocation} ";

            qtiParentTag = qtiParentTag.Replace($"{tagName} ",
                                                $@"{tagName} xmlns=""{baseScheme}"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" " +
                                                schemaLocation + "  " + extensionSchemas + @""" "
                                                );

            xml = xml.Replace(qtiParentOrg, qtiParentTag);
            if (schemaPrefix != "xsi")
            {
                xml = xml.Replace($":{schemaPrefix}", ":xsi");
                xml = xml.Replace($"{schemaPrefix}:", "xsi:");
            }
            return(xml);
        }
 public static string GetBaseSchemaLocation(QtiResourceType resourceType, QtiVersion version)
 => XsdHelper.BaseSchemaLocations[$"{resourceType.ToString()}-{version.ToString()}"];
 private static string GetBaseSchema(QtiResourceType resourceType, QtiVersion version)
 => XsdHelper.BaseSchemas[$"{resourceType}-{version}"];