@ 13ren имеет правильный ответ. Это не ошибка, если узел не соответствует ни одной схеме. Это только предупреждение. Я вижу предупреждения в коде ниже:
private static void ValidateDocument(XmlSchemaSet schemas, string uri)
{
var settings = new XmlReaderSettings
{
Schemas = schemas,
ValidationFlags =
XmlSchemaValidationFlags.
ProcessIdentityConstraints |
XmlSchemaValidationFlags.
ReportValidationWarnings,
ValidationType = ValidationType.Schema
};
settings.ValidationEventHandler += OnValidationEventHandler;
using (var validatingReader = XmlReader.Create(uri, settings))
{
XDocument.Load(
validatingReader,
LoadOptions.SetBaseUri | LoadOptions.SetLineInfo);
}
return;
}
Это производит следующее:
Предупреждение. Не удалось найти информацию о схеме для элемента «jobs».
Предупреждение: не удалось найти информацию о схеме для элемента 'job'.
Предупреждение: не удалось найти информацию о схеме для элемента 'id'.
Предупреждение: не удалось найти информацию о схеме для элемента «состояние».
Предупреждение: не удалось найти информацию о схеме для элемента 'job'.
Предупреждение: не удалось найти информацию о схеме для элемента 'id'.
Изменение вашего XML и запуск снова:
<?xml version="1.0" encoding="utf-8" ?>
<jobs xmlns="http://foo.org/importvalidator.xsd">
<job>
<id>1</id>
<state><![CDATA[IL]]></state>
</job>
<job>
<id>2</id>
</job>
</jobs>
выдает ожидаемую ошибку:
Ошибка: элемент 'job' в пространстве имен 'http://foo.org/importvalidator.xsd' имеет неполное содержимое. Список возможных ожидаемых элементов: 'state' в пространстве имен 'http://foo.org/importvalidator.xsd'.