Мне нужна небольшая помощь для проверки файла xml в c # ... У меня есть следующий код:
private const string XSDFOLDER = "XMLSchema/0.1";
[...]
public bool validaXML(MemoryStream ms)
{
XmlReader xmlReader = null;
try {
//define the settings while reading the XML file
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
var localPath = Path.Combine(Server.MapPath("."), XSDFOLDER);
settings.Schemas.Add("http://covid-19.iss.it/XMLSchema/0.1/", Path.Combine(localPath, "covid-19.xsd"));
settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventHandle);
//validate the file with the given settings
xmlReader = XmlReader.Create(ms, settings);
//iterate over the XML
while (xmlReader.Read()) { }
return true;
} catch (Exception ex)
{
Debug.WriteLine(ex.Message);
return false;
}
finally
{
if (xmlReader != null)
{
xmlReader.Close();
}
}
}
private void ValidationEventHandle(object sender, ValidationEventArgs args)
{
//if were are here, it's becouse something is wrong with our XML
Debug.WriteLine("\r\n\tValidation error: " + args.Message);
//lbStatus.Text = "Validation failed. message: " + args.Message;
if (args.Severity == XmlSeverityType.Warning)
Debug.WriteLine("\tWarning: Matching schema not found. No validation occurred." + args.Message);
else
Debug.WriteLine("\tValidation error: " + args.Message);
//throw and exception
throw new Exception(("Validation failed. message: ") + args.Message);
}
, если в файле xml у меня есть (с пробел между пространством имен и именем xsd в xsi: schemaLocation):
<covid-19 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://covid-19.iss.it/XMLSchema/0.1/ covid-19.xsd" xmlns="http://covid-19.iss.it/XMLSchema/0.1/">
Я получаю недопустимое значение xml с ошибкой: Ошибка проверки: невозможно загрузить схему для пространства имен 'http://covid-19.iss.it/XMLSchema/0.1/ '- Не удалось найти файл' C: \ Program Files (x86) \ IIS Express \ covid-19.xsd '. Предупреждение: соответствующая схема не найдена. Проверка не произошла. Не удалось загрузить схему для пространства имен 'http://covid-19.iss.it/XMLSchema/0.1/' - Не удалось найти файл 'C: \ Program Files (x86) \ IIS Express \ covid-19.xsd'.
в то время как в XML у меня есть:
<covid-19 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://covid-19.iss.it/XMLSchema/0.1/covid-19.xsd" xmlns="http://covid-19.iss.it/XMLSchema/0.1/">
или любая строка в xsi.schemaLocation, например:
<covid-19 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://covid-19.iss.it/XMLSchema/0.1/aaaaaaaaaaa.xsd" xmlns="http://covid-19.iss.it/XMLSchema/0.1/">
проверка допустима.
В первом примере xml является правильным и действительным в xmlspy
Я также попытался использовать
settings.Schemas.Add("http://covid-19.iss.it/XMLSchema/0.1/", "http://covid-19.iss.it/XMLSchema/0.1/covid-19.xsd");
и изменить xml следующим образом: (в xmlspy все еще допустимо):
<covid-19 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://covid-19.iss.it/XMLSchema/0.1/ http://covid-19.iss.it/XMLSchema/0.1/covid-19.xsd" xmlns="http://covid-19.iss.it/XMLSchema/0.1/">
, но я получаю сообщение об ошибке: Возникло исключение: 'System. Net .WebException' в System.dll Основное соединение было закрыто: при отправке произошла непредвиденная ошибка.
Не могли бы вы мне помочь? Заранее спасибо.