Чистый XML для проверки вернуть только предупреждение, если XML.nsuri отличается от схемы.пространства имен targetnamespace
Здравствуйте, я пытаюсь проверить XML (a.xml):
<computer type="s" xmlns="http://aaa.aa1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> </computer>
по схеме(а.xsd-файл):
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://aaa.aa"> <xs:element name="computer"> </xs:element> </xs:schema>
Эти файлы проверяются в .net framework (код ниже) только с предупреждениями вместо ошибок. Я пробовал Stylus, Altova, Java и некоторые онлайн-валидаторы, и все они возвращали ошибки проверки. Только пример .net framework ниже возвращает предупреждения. Это проблема, потому что когда я решаю подавить предупреждения и оценивать только ошибки, XML успешно проверяется, но он не является допустимым по используемой схеме. (пространства имен targetnamespace в XSD отличается от xnlns в XML (консорциумом W3C это ошибка)).
Вывод программы:
Предупреждение: не удалось найти информацию о схеме для элемента 'http://aaa.aa1:computer".
Предупреждение: не удалось найти информацию о схеме для атрибута "тип".
Проверка завершена
Вывод программы с подавленными предупреждениями:
(удалить флаг: xmlReadSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;)
Валидация полная
Что я уже пробовал:
private static void ValidateXmlBySchema(string xmlData, string xsdSchema) { StringReader xmlDataReader = new StringReader(xmlData); StringReader schemaReader = new StringReader(xsdSchema); XmlSchema schema = XmlSchema.Read(schemaReader, dataValidationEventHandler); XmlReaderSettings xmlReadSettings = new XmlReaderSettings(); xmlReadSettings.ValidationType = ValidationType.Schema; xmlReadSettings.ValidationEventHandler += new ValidationEventHandler(dataValidationEventHandler); xmlReadSettings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation; // xmlReadSettings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings; xmlReadSettings.Schemas.Add(schema); XmlReader dataReader = XmlReader.Create(xmlDataReader, xmlReadSettings); while (dataReader.Read()) { } dataReader.Close(); Console.WriteLine($"Walidation complette"); } static void dataValidationEventHandler(object sender, ValidationEventArgs e) { Console.WriteLine($"{e.Severity}: {e.Message}"); }